Symfony2从控制器中分离出crud形式

时间:2014-11-09 15:37:23

标签: php symfony

我使用了./app/console generate:doctrine:crud命令并注意到它是如何在我的控制器中创建新方法的:" createCreateForm"," createEditForm"和" createDeleteForm"。有没有办法在单个FormType中创建这些crud表单?

当我们查看生成的createEditForm方法时,它看起来像这样:

private function createEditForm(MyEntity $entity)
{
    $form = $this->createForm(new FormType(), $entity, array(
        'action' => $this->generateUrl('MyEntity_update', array('id' => $entity->getId())),
        'method' => 'PUT',
    ));

    $form->add('submit', 'submit', array('label' => 'Update'));

    return $form;
}

buildForm中的FormType方法.php

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('name')
        ->add('description')
        ->add('save', 'submit')
    ;
}

是否有更好的做法,比如直接将设置传递给buildForm方法?

2 个答案:

答案 0 :(得分:1)

您可以使用FormTypeInterface#setDefaultOptions

use Symfony\Component\OptionsResolver\OptionsResolverInterface;

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'method' => 'PUT',
    ));
}

您不应该使用操作选项执行此操作,因为这应该由您的控制器定义。您的表单类型不应该知道您的应用程序的URL体系结构。

答案 1 :(得分:1)

这些应保留在此处,请记住symfony2使用mvc模式,因此应用程序的实体不应包含与视图或控制器相关的代码。