Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel Livewire从组件中的验证程序获取错误消息_Laravel_Laravel Livewire - Fatal编程技术网

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'
        ];
    }
}