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"),
    ];
}