0

我正在尝试将数据网格过滤器与我的简单实体一起使用:

// MyBundle/Entity/Application.php

/**
 *
 * @ORM\Entity
 * @ORM\Table(name="application")
 */
class Application extends BaseEntity
{
    /**
     * @var integer $_id
     *
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     */
    protected $_id;

    /**
     * @var string $_name
     * 
     * @ORM\Column(name="name", type="string", length=1000)
     */
    protected $_name;

    public function __toString()
    {
        if ((string) $this->_id === '') {
            return "N/A";
        }
        return $this->_name;
    }

    /**
     * Set _id
     *
     * @param integer $id
     */
    public function setId($id)
    {
        $this->_id = $id;
    }

    /**
     * Get _id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->_id;
    }

    /**
     * Set _name
     *
     * @param string $name
     */
    public function setName($name)
    {
        $this->_name = $name;
    }

    /**
     * Get _name
     *
     * @return string 
     */
    public function getName()
    {
        return $this->_name;
    }
}

// MyBundle/Admin/ApplicationAdmin.php

class ApplicationAdmin extends Admin
{
    /**
     * @param string $code
     * @param string $class
     * @param string $baseControllerName
     */
    public function __construct($code, $class, $baseControllerName)
    {
        parent::__construct($code, $class, $baseControllerName);
        $this->setMaxPerPage(25);
    }

    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->add('id', 'integer')
            ->add('name', 'text')
        ;
    }

    /**
     * {@inheritdoc}
     */
    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
    {
        $datagridMapper
            ->add('name');
        ;
    }

    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper
            ->addIdentifier('id', null, array('label' => 'ID'))
            ->addIdentifier('name', null, array('label' => 'Name'))
        ;
    }
}

但是当我试图获取应用程序列表时,我得到:

Notice: Undefined index: name in /path-to-symfony-project/vendor/bundles/Sonata/DoctrineORMAdminBundle/Guesser/FilterTypeGuesser.php line 65

如果将configureDatagridFilters功能代码更改为:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
        ->add('name', 'doctrine_orm_string');
    ;
}

我成功获得了带有请求过滤器的应用程序列表,但是当我尝试使用一些数据提交过滤器表单时(即名称包含 aaa),我收到另一个错误:

[Semantical Error] line 0, col 87 near 'name LIKE :n': Error: Class MyBundle\Entity\Application has no field or association named name

如果将configureDatagridFilters功能代码更改为:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
        ->add('_name');
        //or
        //->add('_name', 'doctrine_orm_string');
    ;
}

我也成功获得了带有请求过滤器的应用程序列表,但是当我尝试提交带有一些数据的过滤器表单(即名称包含 aaa)时,我收到第三个错误:

Invalid parameter format, : given, but :<name> or ?<num> expected.
500 Internal Server Error - QueryException

我没有想法,请帮忙。

4

1 回答 1

-3

也许是时候将旧公司的编码风格更改为PSR-1 基本编码标准PSR-2-coding-style-guide用于所有 Symfony2 应用程序。

不推荐对私有/受保护属性使用 undescores,并且仅对不存在私有和受保护方法的旧 PHP4 项目有价值。 在一个应用程序中混合不同的编码风格是不好的。所有 Symfony 捆绑包都使用 PSR 标准和Symfony 标准

于 2013-04-13T12:00:58.453 回答