【问题标题】:Symfony, minMessage from Constraints not displayingSymfony,来自约束的 minMessage 未显示
【发布时间】:2020-09-03 02:24:27
【问题描述】:

我是 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 约束,我真的不知道为什么

【问题讨论】:

    标签: symfony constraints symfony-3.4


    【解决方案1】:

    您忘记添加form_errors。签出this

    【讨论】:

    • 我试过这样做,它显示了两次错误,我添加的所有约束都有它们的错误消息,除了 Length 一个,它不显示消息,它打开一个有与我在 css 中编写的具有默认消息的代码无关,就像这些长度错误的处理方式与其他错误不同。我不能写超过最大长度,默认消息仅在“伪”太短时显示。不知道我解释清楚了没有告诉我
    • 它的行为应该是一样的(看你的代码,我找不到任何不一样的原因)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    相关资源
    最近更新 更多