为什么我在createForm中需要TaskType?

问题描述 投票:-2回答:1

我是初学者。昨天我测试了Symfony的工具,比如generate:doctrine:crud。我现在看到很多事情我可以做得更容易,然后手动。案例是在分析了我发现的生成代码之后:

 $editForm = $this->createForm('AppBundle\Form\TaskType', $task);

我花了一些时间阅读官方文档和一些教程,但我无法找到我怀疑的确切答案。为什么我需要这个部分:AppBundle\Form\TaskType?它应该包含什么?我看到我可以移动到构建表单的TaskType文件。

$builder->add('name')->add('datetime');

但是,如果我必须为此创建单独的文件,那就没用多少了。有没有办法避免使用TaskType文件?我尝试以这种方式运行任务实体的编辑表单:

$editForm = $this->createForm($task);

但它出错了。此致,卢卡斯

编辑#1 -----任务实体的控制器editAction

/**
 * Displays a form to edit an existing task entity.
 *
 * @Route("/{id}/edit", name="task_edit")
 * @Method({"GET", "POST"})
 */
public function editAction(Request $request, Task $task)
{
    $deleteForm = $this->createDeleteForm($task);
    $editForm = $this->createForm('AppBundle\Form\TaskType', $task);
    $editForm->handleRequest($request);

    if ($editForm->isSubmitted() && $editForm->isValid()) {
        $this->getDoctrine()->getManager()->flush();

        return $this->redirectToRoute('task_edit', array('id' => $task->getId()));
    }

    return $this->render('task/edit.html.twig', array(
        'task' => $task,
        'edit_form' => $editForm->createView(),
        'delete_form' => $deleteForm->createView(),
    ));
}

和TaskType

class TaskType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')->add('datetime');
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Task'
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'appbundle_task';
    }


}
symfony crud symfony-3.3
1个回答
1
投票

这是您正在调用的控制器的方法。

Framework Controller是多个symfony服务的外观。其中之一是FormFactory服务。

要创建您需要的表单:

  1. 表单类型(必填)
  2. 数据(可选)
  3. 表格选项(可选)

CreateForm()它在父类中实现,因此它适用于所有类型的表单和实现。

Symfony\Bundle\FrameworkBundle\Controller\Controller

    /**
     * Creates and returns a Form instance from the type of the form.
     *
     * @param string|FormTypeInterface $type    The built type of the form
     * @param mixed                    $data    The initial data for the form
     * @param array                    $options Options for the form
     *
     * @return Form
     */
    public function createForm($type, $data = null, array $options = array())
    {
        return $this->container->get('form.factory')->create($type, $data, $options);
    }
© www.soinside.com 2019 - 2024. All rights reserved.