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

标签 php laravel validation 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',
];

在我需要针对变量的值或一般的动态值进行验证之前,这项工作非常顺利。

例如:将 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/

相关文章:

php - 如何在这种 laravel 验证回调中访问外部变量?

xml - 如何修复 soapenv :Envelope issue in XSD schema while validating with SOAP request/response

c# - 验证阻止自动回发复选框

php - 如何为 Android 和服务器创建相同的 key

php - Auth::user()->username 和类似的非常慢

php - 从 laravel 中的时间戳获取日期

javascript - CustomFieldValidator ClientValidationFunction 未触发且没有错误

php - 如何更新特定列而不重复并替换值

php - 使用两个时间戳列之间的差异在 MySQL 中过滤表

javascript - 如何检查用户机器上预装的应用程序?