我的形式是自引用的实体的基础(类具有父类)Symfony2的:如何在窗体类获得动作名称
对于parent
领域上,我想有不同的query_builder
功能根据动作名。当动作为update
时,parent
字段(下拉列表)包含所有类别,但编辑类别除外。这很好。但是,当行动是Create new
,父窗体字段只包含null
值(在我的情况下主要类别)。 这类别窗体类 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
数组包含操作名称,但内部非常深。
您需要得到的http://stackoverflow.com/questions/22852664/how-can-i-get-the-action-name-in-a-symfony2-controller的可能重复是来自请求 –
谢谢为答复。我会尝试将操作名称从控制器发送到表单。 – Psyhos
@psyhos写你的结果作为答案,它会更好;) – Veve