Laravel Livewire从组件中的验证程序获取错误消息
在我的Laravel Livewire从组件中的验证程序获取错误消息,laravel,laravel-livewire,Laravel,Laravel Livewire,在我的注册表表单中,我在表单中有一个用户名输入字段,我只想使用以下规则对其进行验证: 'required|regex:/^[a-zA-Z]+$/u|min:5|max:15|unique:users' 我想得到验证错误,并用另一种方式发送它来查看,而不是像使用Laravel实现一样在视图中使用bags消息。例如: 组成部分: 公共函数updateUserName($username) { //$validator=$this->validate(['username'=>'必需| rege
注册表
表单中,我在表单中有一个用户名
输入字段,我只想使用以下规则对其进行验证:
'required|regex:/^[a-zA-Z]+$/u|min:5|max:15|unique:users'
我想得到验证错误,并用另一种方式发送它来查看,而不是像使用Laravel
实现一样在视图中使用bags
消息。例如:
组成部分:
公共函数updateUserName($username)
{
//$validator=$this->validate(['username'=>'必需| regex:/^[a-zA-Z]+$/u |最小值:5 |最大值:15 |唯一值:用户]);
$validator=$this->validateOnly($username,['username'=>'必需| regex:/^[a-zA-Z]+$/u |最小值:5 |最大值:15 |唯一值:用户]);
如果($validator->fail()){
// ...
}否则{
// ...
}
}
在这个
组件中
如何获得验证错误?如果($validator->fails()),您不必检查
如果验证失败,将抛出一个标准ValidationException(并由Livewire捕获),并且标准$errors对象在组件的视图中可用。因此,在应用程序的其余部分中处理验证的任何现有代码(可能包括刀片)也将应用于此
只需将其添加到刀片文件中(最好在输入标记之后)
@错误('username')
{{$message}}
@恩德罗
使用validate()
/validateOnly()
时,如果验证失败,将引发异常。Laravel将截获此验证错误,以便在刀片模板中处理它,例如@error('fieldName')
为了使用Livewire“实时”进行验证,您需要捕获该异常。要使用@error('fieldName')
获得实时验证,还应在完成后重新抛出异常
公共功能已更新($field)
{
试一试{
$this->validateOnly($field);
}捕获(\illumb\Validation\ValidationException$e){
//做你的事情,在这里使用$validator
$validator=$e->validator;
// ...
//完成后,重新抛出异常
扔$e;
}
}
您可能已经注意到,这里没有任何规则的定义。这是因为它们应该在您的类的受保护属性$rules
中定义(除非您有非常令人信服的理由将其排除在该组件的全局规则集中)
如果您需要在规则中引入其他属性或使用函数,您可以删除该属性并声明rules()
方法-这没有很好的文档记录,因此可能有点模糊
class Foo extends Component
{
public function rules()
{
return [
'username' => 'required|regex:/^[a-zA-Z]+$/u|min:5|max:15|unique:users'
];
}
}
旁注:您可能不想使用正则表达式,而是想使用规则。默认情况下,我使用的是此解决方案,正如我所说,我不想使用此解决方案,我尝试在组件而不是视图中获取消息,因为我想在视图中显示之前处理错误,正如您所说的,在组件中检查验证并获取捕获,我的问题是,如果我们有更多的验证,我如何验证它们?例如,username
是我的一个表单字段,我在表单中输入了一些其他的input
,如何使用username
realtime来验证它们?只需像使用用户名一样定义规则(作为键/值数组),然后将updateUserName($field)
重命名为updated($field)
。规则与任何Laravel验证规则数组一样。我的问题是,我可以使用多个规则并逐个验证表单字段,而不是通过一个操作验证所有字段吗?是的,使用validateOnly
只验证一个特定字段,只需将字段的名称发送到该方法。非常好,你能用一个例子更新你的帖子吗?我怎么能做到?提前谢谢
class Foo extends Component
{
protected $rules = [
'username' => 'required|regex:/^[a-zA-Z]+$/u|min:5|max:15|unique:users'
];
// ....
}
class Foo extends Component
{
public function rules()
{
return [
'username' => 'required|regex:/^[a-zA-Z]+$/u|min:5|max:15|unique:users'
];
}
}