为什么我在createForm中需要TaskType?

时间:2017-12-23 11:50:24

标签: symfony crud symfony-3.3

我是初学者。昨天我测试了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';
    }


}

1 个答案:

答案 0 :(得分:1)

这是您正在呼叫的控制器的方法。

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

要创建您需要的表单:

  1. 表单类型(必填)
  2. 数据(可选)
  3. 表单选项(可选)
  4. CreateForm()它在父类中实现,因此它适用于所有类型的表单和实现。

    的Symfony \捆绑\ FrameworkBundle \控制器\控制器

    <div id="table1">
      <div class="tbody">
        <div class="tr">
          <span class="category">categoryText</span>
          <span class="tabkeTd" id="tabkeTd11"> <a href="#"> td 1 </a>
          </span>
          <span class="tabkeTd" id="tabkeTd12"> <a href="#"> td 2 </a>
          </span>
          <span class="tabkeTd" id="tabkeTd13"> <a href="#"> td 3 </a>
          </span>
          <span class="tabkeTd" id="tabkeTd14"> <a href="#"> td 4 </a>
          </span>
          <span class="tabkeTd" id="tabkeTd15"> <a href="#"> td 5 </a>
          </span>
        </div>
        <div class="tr">
          <span class="category">categoryText</span>
          <span class="tabkeTd" id="tabkeTd11"> <a href="#"> td 1 </a>
          </span>
          <span class="tabkeTd" id="tabkeTd12"> <a href="#"> td 2 </a>
          </span>
          <span class="tabkeTd" id="tabkeTd13"> <a href="#"> td 3 </a>
          </span>
          <span class="tabkeTd" id="tabkeTd14"> <a href="#"> td 4 </a>
          </span>
          <span class="tabkeTd" id="tabkeTd15"> <a href="#"> td 5 </a>
          </span>
        </div>
      </div>
    </div>