我的形式是自引用的實體的基礎(類具有父類)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