【问题标题】:Symfony Submit button doesn't work IsSubmitted never verifiedSymfony 提交按钮不起作用 IsSubmitted 从未验证
【发布时间】: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-&gt;persist($form-&gt;getData())
  • 只是检查。您是否尝试过检查是否有任何验证错误?您应该检查的另一件事是额外的表单字段。 Symfony 不喜欢额外的表单字段,但您可以在configureOptions 中设置一个标志以允许额外的字段。此外,@MartinM。询问post方法。您是否确保表单是通过post 提交的?如果不是,表单将不会被标记为已提交。试试&lt;input type="submit" &gt;,我认为这不会有什么不同,但值得一试

标签: php symfony doctrine twig


【解决方案1】:

要使这样的按钮起作用,它必须在{{ form_start(your_form) }} {{ form_end(your_form) }} twig 标签内

否则它不会算作表单提交按钮

您可以使用$builder-&gt;add('submit', SubmitType::class); 来解决这个问题

讨论后编辑:

要自定义表单行的呈现,应使用form_row(form.children) 而不是form(form.children),因为这将显示所有信息,例如表单错误。

更精确的处理可以参考the symfony documentation

【讨论】:

  • 也许我没有正确理解,但我的按钮似乎在开始和结束树枝标签内?我尝试添加 $builder->add('submit', SubmitType::class);什么都没有改变
  • 你做到了,我写答案时没有看到你的全貌。当你在 isSubmitted 和 isValid 之间转储一些东西时会发生什么吗?
  • 对于表单错误,您必须使用 form_row(form.children) 而不是 form(form.children) 或者您可以使用symfony.com/doc/current/form/form_customization.html 进行更精确的处理
  • 没问题,玩得开心:) 我要编辑我的答案
猜你喜欢
  • 2018-02-14
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
相关资源
最近更新 更多