Laravel Livewire - 常量表达式在 $rules 中包含无效操作 属性
Laravel Livewire - Constant expression contains invalid operations in $rules property
我试图在我的 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()
方法,而不是 returns 规则数组 - 这允许您在规则中使用函数。在内部,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"),
];
}
我试图在我的 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()
方法,而不是 returns 规则数组 - 这允许您在规则中使用函数。在内部,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"),
];
}