Symfony2 处理表单提交 Class

Symfony2 Handling Submit in Form Class

这是我的疑问:

所以我根据文档创建了表单Class: http://symfony.com/doc/current/book/forms.html#creating-form-classes

// src/AppBundle/Form/Type/TaskType.php
namespace AppBundle\Form\Type;

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

class TaskType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('task')
            ->add('dueDate', null, array('widget' => 'single_text'))
            ->add('save', 'submit');
    }

    public function getName()
    {
        return 'task';
    }
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\Task',
        ));
    }
}

但我不知道将提交处理程序放在哪里。在 http://symfony.com/doc/current/book/forms.html#handling-form-submissions 中将它与其他所有内容一起放入控制器中,并在 (...#forms-and-doctrine) 中提示您该做什么,但它什么也没说(或者我找不到它) 关于在使用表单时具体在哪里以及如何处理提交 class。一点帮助将不胜感激。

提前致谢

使用了表单类型,这样您就不必一直创建相同的表单,或者只是为了将内容分开。

表单操作仍然在控制器中处理。
鉴于您的示例表单类型 class,类似于;

public function taskAction(Request $request)
{
    // build the form ...
    $type = new Task();
    $form = $this->createForm(new TaskType(), $type);

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        // do whatever you want ...
        $data = $form->getData(); // to get submitted data

        // redirect, show twig, your choice
    }

    // render the template
}

查看 Symfony best practices 表格。

如果你需要给你的表单一些post验证逻辑,你可以创建一个表单处理程序,它也将嵌入验证或监听 Doctrine 事件。

但这只是更复杂用法的提示 ;)

否则,Rooneyl 的答案就是您要找的。