Laravel Livewire - 常量表达式在 $rules 属性中包含无效操作

Mat*_*ias 3 php validation laravel laravel-livewire

我尝试在livewire组件中定义一些验证规则来验证一些 FormData:

protected $rules = [
    'website' => 'url|nullable',
    'zipcode' => 'regex:/\b\d{5}\b/|nullable',
    'founding_year' => 'required|digits:4|integer|min:1700|max:2020',
];
Run Code Online (Sandbox Code Playgroud)

在我需要验证变量的值或一般动态值之前,这项工作非常有效。

例如:将max属性从硬编码的2020 年更改为当前年份

 protected $rules = [
   ...
   'founding_year' => 'required|digits:4|integer|min:1700|max:'. date('Y'),
];
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会在异常中解决:

Symfony\Component\ErrorHandler\Error\FatalError

常量表达式包含无效操作

有人知道如何解决这个问题吗?

Qir*_*rel 6

在 PHP 中直接声明属性值时不能调用函数或方法。

使用 Livewire,您可以指定一个rules()返回规则数组的方法 - 这允许您在规则中使用函数。在内部,Livewire 现在将运行该方法的结果,而不是获取受保护的$rules数组。这意味着您仍然可以使用Livewire 附带的$this->validate()$this->validateOnly()方法。

因此,不要定义protected $rules;属性,而是声明rules()方法,

public function rules() 
{
    return [
        'website' => 'url|nullable',
        'zipcode' => 'regex:/\b\d{5}\b/|nullable',
        'founding_year' => 'required|digits:4|integer|min:1700|max:'.date("Y"),
    ];
}
Run Code Online (Sandbox Code Playgroud)