私は単純なエンティティでデータグリッドフィルターを使用しようとしています:
// 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 が含まれる) で送信しようとすると、3 番目のエラーが発生します。
Invalid parameter format, : given, but :<name> or ?<num> expected.
500 Internal Server Error - QueryException
アイデアがありません。助けてください。