【问题标题】:Form is not displaying errors in Symfony 2.8Symfony 2.8 中的表单不显示错误
【发布时间】:2018-07-23 05:12:42
【问题描述】:

表单正在验证,form_errors(form) 中也显示错误,但是当我尝试 form_errors(form.Title) 时,表单通过重定向到同一页面进行验证,但不显示任何错误。

控制器

class CRUDController extends Controller
{
    /**
     * @Route("/add", name="insert_article_route")
     */
    public function insertArticleAction(Request $request)
    {
        $article = new Article();

        // bootstrap class
        $class = ["class"=>"form-control"];

        $form = $this->createForm(ArticleType::class,$article);

        $form->handleRequest($request);

        if($request->isMethod('POST'))
        {       
            if($form->isSubmitted() && $form->isValid())
            {   
                // get form data
                $article = $form->getData();                        

                // get image file
                $file = $article->getImage();

                // get original image name
                $filename = $file->getClientOriginalName();

                // set image name in entity
                $article->setImage($filename);

                // Image upload
                $dir = $this->getParameter('images');            
                $file->move($dir, $filename);                            

                $em = $this->getDoctrine()->getManager();            
                $em->persist($article);
                $em->flush();
                return $this->redirectToRoute('table_route');
            }           
        }
        return $this->render('BlogBundle:Blog:form.html.twig',['form'=>$form->createView()]);                             
    }

树枝形式

{% extends 'BlogBundle::base.html.twig' %}

{% block nav_item %}
<li class="nav-item active">    
        <a class="btn btn-secondary" href="{{ url('table_route') }}">View</a>    
</li>
{% endblock %}
{% block body %}
<div class="container">
    <div class="row mt-5 justify-content-center">
        <div class="col-6">
    {{ form_start(form, { method:'post',attr:{novalidate:'novalidate'}}) }}
    <div class="form-group"> 
        {{ form_errors(form) }}
        {{ form_label(form.Title) }}
        <div class="text-danger">
            {{ form_errors(form.Title) }}
        </div>
        {{ form_widget(form.Id) }}
        {{ form_widget(form.Title) }}
    </div>
    <div class="form-group">
            {{ form_label(form.Description) }}
            {{ form_errors(form.Description) }}
            {{ form_widget(form.Description) }}
        </div>
    <div class="form-group">
        {{ form_label(form.Content) }}
        {{ form_errors(form.Content) }}
        {{ form_widget(form.Content) }}
    </div>
     <div class="form-group">
            {{ form_label(form.Category) }}
            {{ form_errors(form.Category) }}
            {{ form_widget(form.Category) }}
        </div>
    <div class="form-group">
            {{ form_label(form.CreatedAt) }}
            {{ form_errors(form.CreatedAt) }}
            {{ form_widget(form.CreatedAt) }}
    </div>
    <div class="form-group">            
            {{ form_widget(form.Image) }}
            {{ form_errors(form.CreatedAt) }}
    </div>
    <div class="form-group">

        {{ form_widget(form.Submit) }}
    </div>
</div>    
</div>        
</div>
{{ form_rest(form) }}
{{ form_end(form, {'render_rest':false}) }}
{% endblock %}

实体文章

<?php

namespace BlogBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * Article
 * 
 * @ORM\Table(name="article") 
 * @ORM\Entity(repositoryClass="BlogBundle\Repository\ArticleRepository")
 */
class Article
{

    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=255)
     * @Assert\NotBlank()
     * @Assert\Length(min="5")
     */
    private $title;

    /**
     * @var string
     *
     * @ORM\Column(name="description", type="string", length=255)
     * @Assert\NotBlank()
     */
    private $description;

    /**
     * @var string
     *
     * @ORM\Column(name="content", type="string", length=255)
     * @Assert\NotBlank()
     */
    private $content;

   ...
   .....

截图

Form errors in form_errors(form)

【问题讨论】:

    标签: php symfony symfony-forms


    【解决方案1】:

    删除这一行

      {{ form_errors(form) }}
    

    因为这一行覆盖了单个字段的错误消息呈现。

    twig表单字段名应该是,根据实体属性名,本例中 小骆驼壳

    {{ form_errors(form.xxx) }}
    

    【讨论】:

    • 不知道为什么它现在会显示空白,但@habibun 是对的 - 一旦你呈现错误消息,你应该不能再做一次。你可以在render 通话之前尝试dump$form-&gt;getErrors(TRUE, TRUE) 吗?
    • 你有没有机会使用一些覆盖form_errorsTwig函数的自定义全局表单主题?
    • 我看到你的属性名称是小写的,但在你的树枝上都是大写的。尝试将其更改为小写
    • @habibun 谢谢老兄!我将 form.Title 更改为 form.title 并且它起作用了:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    相关资源
    最近更新 更多