无法从AbstractType类中获取$ this-> generateUrl()

时间:2014-04-04 14:19:53

标签: forms symfony fosuserbundle routes builder

我无法获得$ this-> generateUrl()工作,但它可以在我的控制器中工作,或者我应该定义' setAction'用另一种方式?

class UserLoginType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->setMethod('POST')
            ->setAction($this->generateUrl('fos_user_security_check'))
            ->add('username', 'text')
            ->add('password', 'password')
            ->add('save', 'submit');
    }

    public function getName()
    {
        return 'user_login';
    }
}

2 个答案:

答案 0 :(得分:6)

如果您要在单独的类中而不是在控制器中构建表单,则应将action传递给表单类型,如下所示:

// In your controller

$form = $this->createForm(new FormType(), $object, array(
    'action' => $this->generateUrl('target_route'),
    'method' => 'POST',
));

AbstractType不包含任何方法generateUrl(),这就是为什么您无法直接在该类型中设置操作的原因。您可以在此处找到详细信息:http://symfony.com/doc/current/book/forms.html#changing-the-action-and-method-of-a-form

答案 1 :(得分:0)

是的,在Form类的函数buildForm中,输入:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->setMethod('POST')
        ->setAction( $options["data"]["action"])
        ->add('name', TextType::class, array('label' => 'Nombre'))
    ;
}