我创建一个表单,然后单击“提交”按钮,显示此错误消息:
请在列表中选择一个项目。
如何更改此消息并设置样式(使用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'
])
;
...
}
答案 0 :(得分:0)
为了使用自定义消息,您必须在HTML表单上添加“ novalidate”。例如:
和Twig:
{{ 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'
)
));
This Stackoverflow answer有更多关于如何在Symfony中使用novalidate的信息。您还可以查看文档以获取更多信息。
关于样式,您可以使用JavaScript触发类,然后您可以在CSS中对类进行样式设置,例如本示例取自Happier HTML5 Form Validation。您还可以查看documentation on MDN并使用:valid
和:invalid
选择器。
const inputs = document.querySelectorAll("input, select, textarea");
inputs.forEach(input => {
input.addEventListener(
"invalid",
event => {
input.classList.add("error");
},
false
);
});
编辑:
您可能看不到自定义消息,因为它来自服务器端,提交表单时当前看到的消息是客户端验证。因此,您可以将novalidate
放在字段中,也可以使用setCustomValidity(
在客户端覆盖验证消息,如this SO post中所述,其中也包含许多有用的链接。使用表单生成器的示例:
$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'
]);