【问题标题】:Laravel Livewire - Constant expression contains invalid operations in $rules propertyLaravel Livewire - 常量表达式包含 $rules 属性中的无效操作
【发布时间】:2021-03-07 07:28:52
【问题描述】:

我尝试在我的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

常量表达式包含无效操作

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

【问题讨论】:

    标签: php laravel validation laravel-livewire


    【解决方案1】:

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

    【讨论】:

    • 谢谢@Qirel,这正是我想要的。
    • 感谢@Qirel,不知道可以使用rules(),估计Livewire 文档中没有介绍
    猜你喜欢
    • 2020-09-26
    • 2018-12-02
    • 2017-10-19
    • 2017-04-11
    • 2023-02-12
    • 2017-06-18
    相关资源
    最近更新 更多