symfony - 如何更改 Symfony 中的错误消息
问题描述
我创建了一个表单,然后当我单击提交按钮时,显示此错误消息:
请在列表中选择一个项目。
如何更改此消息并设置其样式(使用 CSS)?
实体:
...
/**
* @ORM\Column(type="string", length=255)
* @Assert\NotBlank(message="Hi user, Please select an item")
*/
private $name;
...
控制器:
...
public function index(Request $request)
{
$form = $this->createForm(MagListType::class);
$form->handleRequest($request);
return $this->render('index.html.twig', [
'form' => $form->createView()
]);
}
...
形式:
...
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', EntityType::class,[
'class' => InsCompareList::class,
'label' => false,
'query_builder' => function(EntityRepository $rp){
return $rp->createQueryBuilder('u')
->orderBy('u.id', 'ASC');
},
'choice_label' => 'name',
'choice_value' => 'id',
'required' => true,
])
->add('submit', SubmitType::class, [
'label' => 'OK'
])
;
...
}
解决方案
为了使用自定义消息,您必须在 HTML 表单中添加“novalidate”。例如:
用树枝:
{{ form_start(form, {attr: {novalidate: 'novalidate'}}) }}
{{ form_widget(form) }}
{{ form_end(form) }}
或在您的控制器中:
$form = $this->createForm(MagListType::class, $task, array( //where task is your entity instance
'attr' => array(
'novalidate' => 'novalidate'
)
));
这个 Stackoverflow 答案有更多关于如何在 Symfony 中使用 novalidate 的信息。您还可以查看文档以获取更多信息。
至于样式,您可以使用 JavaScript 来触发类,然后您可以在 CSS 中设置样式,就像这个取自Happier HTML5 Form Validation的示例一样。您还可以查看MDN 上的文档并使用:valid
和:invalid
选择器。
const inputs = document.querySelectorAll("input, select, textarea");
inputs.forEach(input => {
input.addEventListener(
"invalid",
event => {
input.classList.add("error");
},
false
);
});
编辑:
您可能没有看到您的自定义消息,因为它来自服务器端,您当前在提交表单时看到的消息是客户端验证。因此,您可以放置novalidate
在您的字段上,也可以使用 ) 覆盖客户端的验证消息setCustomValidity(
,如本 SO 帖子中所述,该帖子还包含许多有用的链接。使用表单生成器的示例:
$builder
->add('name', EntityType::class,[
'class' => InsCompareList::class,
'label' => false,
[
'attr' => [
'oninvalid' => "setCustomValidity('Hi user, Please select an item')"
]
],
'query_builder' => function(EntityRepository $rp){
return $rp->createQueryBuilder('u')
->orderBy('u.id', 'ASC');
},
'choice_label' => 'name',
'choice_value' => 'id',
'required' => true,
])
->add('submit', SubmitType::class, [
'label' => 'OK'
]);
推荐阅读
- flutter - 我想在单击 onTap 时更改作为 ListView 子项的 CustomListTile 的颜色,并将其他子项颜色设置为默认颜色?
- swift - RealityKit 和 Reality Composer – 图像识别
- reactjs - 类型错误:this.getISO 不是函数
- laravel - 如何在 vuejs + laravel 中检索复选框值
- apache-kafka - Kafka:使用普通消费者组访问多个主题
- git - 如何将 GitLab 的 CI 子模块设置指定为仅在主分支上使用提交?
- angular - 无法从 ngOnInit() 访问类变量
- csv - 如何在 pyspark 中附加 2 个数据帧并将两个标题都保留在第一行和第二行?或者将第二个标头添加到已经有 1 个标头的数据帧中?
- javascript - CSV 格式的 Angular 数据中的逗号相关问题
- python - WebElement 和 __getitem__ 有什么问题