【发布时间】: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