【发布时间】:2015-11-05 14:15:43
【问题描述】:
我的表单基于自引用实体(类别有父类别)
对于parent 字段,我希望根据操作名称具有不同的query_builder 函数。当操作为update 时,parent 字段(下拉列表)包含所有类别,编辑类别除外。这是很好的工作。但是,当操作为 Create new 时,父表单字段仅包含 null 值(在我的情况下为 Main 类别)。
这是类别表格类
CategoryType类:
namespace Dimas\CatalogBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Doctrine\ORM\EntityRepository;
class CategoryType extends AbstractType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('name')
->add('parent', 'entity', array(
'label' => 'Parent Category ',
'empty_value' => '- Main level -',
'class' => 'DimasCatalogBundle:Category', 'property' => 'getTreeName',
'required' => false,
'query_builder' => function(EntityRepository $er) use ($options) {
$er->createQueryBuilder('u');
//need only if action is 'update'
$er->where('u.id <> :selfId');
$er->setParameter(':selfId', $options['data']->getId());
// end if
return $er;
},
));
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'Dimas\CatalogBundle\Entity\Category'
));
}
/**
* @return string
*/
public function getName() {
return 'dimas_catalogbundle_category';
}
}
在query_builder 中添加if 是个好主意吗?如何获得动作名称?
$options 数组包含动作名称,但里面太深了。
【问题讨论】:
-
您需要从请求中获取的stackoverflow.com/questions/22852664/… 的可能副本
-
感谢您的回复。我会尝试将动作名称从控制器发送到表单。
-
@psyhos 把你的结果写成答案,这样会更好;)