在Symfony Form类

时间:2015-12-11 09:29:24

标签: php symfony

这是我想要实现的目标。我正在使用SymfonyContrib\Bundle\LinkButtonBundle\LinkButtonBundle在提交按钮旁边的表单中添加简单的后退/取消链接。问题是我不知道如何到达我的路由器,以便我可以使用generate方法生成路由URL。任何人都知道如何将路由器注入我的表单或从我的控制器传递URL,其中表单是使用$this->createform('my_form_foo')

创建的
<?php

namespace My\Form;

use \Symfony\Component\Form\AbstractType;
use \Symfony\Component\Form\FormBuilderInterface;

class Foo extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add(
                'username',
                null,
                [
                    'label' => 'Username',
                    'attr' => [
                        'placeholder' => 'User name',
                    ],
                    'required' => true
                ]
            )
            ->add('actions', 'form_actions', [
                'buttons' => [
                    'save' => [
                        'type' => 'submit'
                    ],
                    'cancel' => [
                        'type' => 'button',
                        'options' => [
                            'url' => '/', // This needs to be generated from a route
                            'label' => 'Back'
                        ]
                    ],
                ]
            ]);
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'my_form_foo';
    }
}

3 个答案:

答案 0 :(得分:1)

如果您在服务容器中将表单注册为服务,则可以将路由器注入表单类。

请参阅:http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html#creating-your-field-type-as-a-service

答案 1 :(得分:1)

在您的具体情况下,直接在视图中添加按钮是一种更好的做法。

(类似的东西)

{{ form_start(form) }}
  {{ form_widget(form) }}

  <button type="submit" value="Save" />
  <a href="{{ path('name_route') }}" role="button">Back</a>

{{ form_end(form) }}

答案 2 :(得分:0)

我建议您管理Controller类中的所有表单操作。如上所述in the doc here,您可以添加流量控制按钮:

$form = $this->createFormBuilder($task)
    ->add('name', 'text')
    ->add('save', 'submit')
    ->add('save_and_add', 'submit')
    ->getForm();

并将控制器中的流程管理为:

if ($form->isValid()) {
    // ... do something

    // the save_and_add button was clicked
    if ($form->get('save_and_add')->isClicked()) {
        // probably redirect to the add page again
    }

    // redirect to the show page for the just submitted item
}

希望这个帮助