Dol*_*rma 0 laravel laravel-livewire
在我的register表单中,我有一个username表单输入字段,我只想用以下规则验证它:
'required|regex:/^[a-zA-Z]+$/u|min:5|max:15|unique:users'
Run Code Online (Sandbox Code Playgroud)
我想得到验证错误并用另一种方式发送它来查看,而不是像实现那样使用bags视图中的消息Laravel。例如:
'required|regex:/^[a-zA-Z]+$/u|min:5|max:15|unique:users'
Run Code Online (Sandbox Code Playgroud)
成分:
<input type="text" class="form-control"
name="username"
wire:model="username"
value="{{old('username')}}">
Run Code Online (Sandbox Code Playgroud)
在这Component我怎样才能得到验证错误?
使用validate()/时validateOnly(),如果验证失败将会抛出异常。Laravel 将拦截此验证错误并在blade-template 中处理它,例如@error('fieldName').
为了使用 Livewire “实时”进行验证,您需要捕获该异常。要使用 进行实时验证@error('fieldName'),您还应该在完成后重新抛出异常。
public function updated($field)
{
try {
$this->validateOnly($field);
} catch (\Illuminate\Validation\ValidationException $e) {
// Do your thing and use $validator here
$validator = $e->validator;
// ...
// Once you're done, re-throw the exception
throw $e;
}
}
Run Code Online (Sandbox Code Playgroud)
您可能已经注意到,这里没有任何规则的定义。这是因为它们应该在您的类的受保护属性中定义$rules(除非您有真正令人信服的理由将其排除在该组件的全局规则集中)。
class Foo extends Component
{
protected $rules = [
'username' => 'required|regex:/^[a-zA-Z]+$/u|min:5|max:15|unique:users'
];
// ....
}
Run Code Online (Sandbox Code Playgroud)
如果您需要在规则中引入其他属性或使用函数,您可以删除该属性并声明一个rules()方法 - 这没有很好的记录,因此可能有点晦涩。
class Foo extends Component
{
public function rules()
{
return [
'username' => 'required|regex:/^[a-zA-Z]+$/u|min:5|max:15|unique:users'
];
}
}
Run Code Online (Sandbox Code Playgroud)
旁注:您可能不想使用正则表达式,alpha而是使用规则。