symfony - 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 约束,我真的不知道为什么
解决方案
您忘记添加form_errors
. 看看这个。
推荐阅读
- excel - 使用共享驱动器的 Excel 模型
- javascript - 如何在 JSPdf 中设置文本颜色的不透明度
- sql-server - 更新语句的 Savechanges 在实体框架核心 3.1 中给出错误
- php - 如何使用 PHP 限制/分页我的 MongoDB 搜索结果?
- java - 在 Docker 中安装卷时无法访问 jarfile 错误
- r - 相关矩阵添加调整后 p 值的附加列
- python - Fasttext 量化无监督模型
- powershell - Powershell - 从 Powershell 远程会话转发事件 - 行为不一致
- appcelerator - Appcelerator Studio 接受 SDK 许可协议,但全部接受
- google-cloud-platform - 将配置单元分区的 ORC 数据加载到 bigquery