首页 > 解决方案 > Symfony,来自约束的 minMessage 未显示

问题描述

我是 Symfony 的新手,刚刚使用 3.4 版本制作了我的第一个项目。在我的表单上使用约束时遇到问题,我正在尝试创建一个具有一些长度约束的字段,但是当我使用不应接受的短值对其进行测试时,表单会在对话框中显示默认消息而不是我在 minMessage 中输入的那个,而不是为 maxLength 显示一条消息,它只是不允许我在字段中输入超过 20 个字符,而不是在超过 20 个时显示一条消息。我不确定这就是它应该如何工作(???),如果是这样,我可以用另一种技术管理错误消息吗?我只是在一个字段上施加限制,直到我解决了这个问题,这就是为什么其他人没有任何限制。这是控制器代码:

<?php

namespace AppBundle\Controller;

use AppBundle\Form\UserType;
use AppBundle\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;

/**
 * Class UserController
 * @package AppBundle\Controller
 * @Route("/user")
 */

class UserController extends Controller
{
    /**
     * @return \Symfony\Component\HttpFoundation\Response
     * @Route("/add", name="add_user")
     */
    public function addAction(Request $request)
    {
        $user = new User();
        $form = $this->createForm(UserType::class, $user);
        $form->handleRequest($request);
        $em = $this->getDoctrine()->getManager();
        if($form->isSubmitted() && $form->isValid()){
            $user->setPwd(md5($user->getPwd()));
            $em->persist($user);
            $em->flush();
            return $this->render('@App/User/show.html.twig', array(
                'user'=>$user
            ));
        }
        return $this->render('@App/User/add.html.twig', array(
            'form'=>$form->createView()
        ));
    }

}

用户类型代码:

<?php

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;

class UserType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('pseudo')
                ->add('nom')
                ->add('prenom')
                ->add('enseignant')
                ->add('pwd', PasswordType::class)
                ->add('confirm_pwd', PasswordType::class);
    }

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

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


}

用户代码(我将把代码放在我的约束所在的位置):

<?php

namespace AppBundle\Entity;

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

/**
 * User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
 */
class User
{
    /**
     * @var string
     *
     * @ORM\Column(name="pseudo", type="string", length=100, unique=true)
     * @Assert\Length(
     *      min = 8,
     *      max = 20,
     *      minMessage = "Your first name must be at least {{ limit }} characters long",
     *      maxMessage = "Your first name cannot be longer than {{ limit }} characters"
     * )
     */
    private $pseudo;
}

我渲染的树枝页面:

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

{% block body %}
    <h1 class="display-4">Formulaire d'inscription</h1>
    {{ form_start(form) }}
    {{ form_row(form.pseudo, {'label': 'Pseudo', 'attr':
    {'placeholder': 'Pseudonyme ...'}}) }}
    {{ form_row(form.nom, {'label': 'Nom', 'attr':
    {'placeholder': 'Nom ...'}}) }}
    {{ form_row(form.prenom, {'label': 'Prenom', 'attr':
    {'placeholder': 'Prenom ...'}}) }}
    {{ form_row(form.enseignant, {'label': 'Enseignant'}) }}
    {{ form_row(form.pwd, {'label': 'Mot De Passe', 'attr':
    {'placeholder': 'Mot De Passe'}}) }}
    {{ form_row(form.confirm_pwd, {'label': 'Confirmation Mot De Passe', 'attr':
    {'placeholder': 'Mot De Passe'}}) }}
    <button type="submit" class="btn btn-success">Inscription </button>
    {{ form_end(form) }}
{% endblock %}

你知道我应该怎么做才能让它工作吗?如果我的英语不好,我很抱歉,如果您需要更多或更少的代码,请告诉我!祝你有美好的一天,谢谢!

PS:我是 Symfony 的真正初学者,所以请善待 :) PSbis:我已经检查了文档并且我做了所有应该做的事情,但我可能错过了一些东西(即使我检查了多次)

编辑:我在其他字段上添加了 EqualTo 和 Unique 约束,并且都显示了两个错误消息,所以这是来自 Length 约束,我真的不知道为什么

标签: symfonyconstraintssymfony-3.4

解决方案


您忘记添加form_errors. 看看这个


推荐阅读