【发布时间】:2020-06-12 08:50:49
【问题描述】:
我正在学习 symfony 4,我正在测试如何通过从表单中获取数据来更新数据库。似乎 isSubmitted 从未验证过。
这是我的控制器
/**
* @Route("scheduler/new", name="scheduler_create")
* @Route("scheduler/{id}/edit", name="scheduler_edit")
*/
public function form(Task $task = null, Request $request, EntityManagerInterface $manager){
if(!$task) {
$task = new Task();
}
$form = $this->createForm(TaskType::class, $task);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$manager->persist($task);
$manager->flush();
return $this->redirectToRoute('scheduler_show', ['id' => $task-> getId()]);
}
return $this->render('scheduler/create.html.twig', [
'formTask' => $form->createView(),
'editMode'=> $task->getId() !== null
]);
}
我的看法:
{% extends 'base.html.twig' %}
{% form_theme formTask 'bootstrap_4_layout.html.twig' %}
{% block body %}
<h1> Création d'une tâche </h1>
{{ form_start(formTask) }}
<p>
Inscrire ici le nom souhaité pour la tâche : {{form(formTask.title, {'attr' : {'placeholder' : "Titre de la tâche"} }) }}
Veuillez d'écrire l'objet de la tâche : {{form(formTask.content, {'attr' : {'placeholder' : "Description de la tâche"} }) }}
Séléctionner le groupe destinataire de la tâche : {{form(formTask.groupe) }}
</p>
<p> A quelle date et souhaitez vous executer la tâche ? {{form(formTask.launch_date) }} </p>
{{form(formTask.activer) }}
<button type="submit" class="btn btn-success">
{% if editMode %}
Sauvegarder les modifications
{% else %}
Sauvegarder la tâche
{% endif %}
</button>
{{ form_end(formTask) }}
{% endblock %}
我已经使用 symfony 工作了 2 周,所以没那么久。 我正在关注一个在线教程,它一直工作到现在 我看不到任何错误消息,也不知道如何解决。
这是我的表单类型:
<?php
namespace App\Form;
use App\Entity\Task;
use App\Entity\Groupe;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
class TaskType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
->add('launch_date', DateTimeType::class)
->add('content')
->add('activer')
->add('groupe', EntityType::class, [
'class' => Groupe::class,
'choice_label' => 'title'
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Task::class,
]);
}
}
【问题讨论】:
-
在处理表单之前尝试检查该方法是否已发布,然后继续。
-
另外当你坚持我认为应该是
$manager->persist($form->getData()) -
只是检查。您是否尝试过检查是否有任何验证错误?您应该检查的另一件事是额外的表单字段。 Symfony 不喜欢额外的表单字段,但您可以在
configureOptions中设置一个标志以允许额外的字段。此外,@MartinM。询问post方法。您是否确保表单是通过post提交的?如果不是,表单将不会被标记为已提交。试试<input type="submit" >,我认为这不会有什么不同,但值得一试