我试图在我的 livewire
组件中定义一些验证规则来验证一些 FormData:
protected $rules = [
'website' => 'url|nullable',
'zipcode' => 'regex:/\b\d{5}\b/|nullable',
'founding_year' => 'required|digits:4|integer|min:1700|max:2020',
];
在我需要针对变量的值或一般的动态值进行验证之前,这项工作非常顺利。
例如:将 max
属性从硬编码的 2020 更改为 当前年份:
protected $rules = [
...
'founding_year' => 'required|digits:4|integer|min:1700|max:'. date('Y'),
];
不幸的是,这会在异常中解决:
Symfony\Component\ErrorHandler\Error\FatalError
Constant expression contains invalid operations
有人知道如何解决这个问题吗?
最佳答案
在 PHP 中直接声明属性值时不能调用函数或方法。
使用 Livewire,您可以指定一个返回规则数组的 rules()
方法 - 这允许您在规则中使用函数。在内部,Livewire 现在将运行该方法的结果,而不是获取 protected $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"),
];
}
关于php - Laravel Livewire - 常量表达式在 $rules 属性中包含无效操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64987789/