我有一個表單定義,它使用了迄今爲止最棒的字段類型entity
。使用選項query_builder
我選擇我的值並顯示。Symfony2:具有空值的實體表單字段
可悲的是,我需要顯示null
默認值,如all
(這是一個過濾器形式)。我不喜歡選項entity
,因爲我有數據庫值,FormType
不應該查詢數據庫。
我到目前爲止的做法是實現一個自定義字段類型,它擴展了entity
並在列表頂部添加了一個空條目。字段類型被加載和使用,但不幸的是,虛擬值不被顯示。
字段定義:
$builder->add('machine', 'first_null_entity', [
'label' => 'label.machine',
'class' => Machine::ident(),
'query_builder' => function (EntityRepository $repo)
{
return $repo->createQueryBuilder('m')
->where('m.mandator = :mandator')
->setParameter('mandator', $this->mandator)
->orderBy('m.name', 'ASC');
}
]);
形式類型定義:
class FirstNullEntityType extends AbstractType
{
/**
* @var unknown
*/
private $doctrine;
public function __construct(ContainerInterface $container)
{
$this->doctrine = $container->get('doctrine');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setRequired('query_builder');
$resolver->setRequired('class');
}
public function buildView(FormView $view, FormInterface $form, array $options)
{
$class = $options['class'];
$repo = $this->doctrine->getRepository($class);
$builder = $options['query_builder']($repo);
$entities = $builder->getQuery()->execute();
// add dummy entry to start of array
if($entities) {
$dummy = new \stdClass();
$dummy->__toString = function() {
return '';
};
array_unshift($entities, $dummy);
}
$options['choices'] = $entities;
}
public function getName()
{
return 'first_null_entity';
}
public function getParent()
{
return 'entity';
}
}
你可以使用$ choices [''] ='All';在你的表單類型定義 – 2015-03-13 12:10:06