laravel - 如何在 Laravel Rule 中传递参数?
问题描述
我想将此代码移至 App\Rule:
//Currently in class AppServiceProvider extends ServiceProvider
Validator::extend('empty_if', function ($attribute, $value, $parameters, $validator) {
return ($value != '' && request($parameters[0]) != '') ? false : true;
});
所以它应该是这样的:
//in: App\Rules\EmptyIf
public function passes($attribute, $value, $parameters)
{
return ($value != '' && request($parameters[0]) != '') ? false : true;
}
但我的问题是,我不能通过 $parameters
Validator::extend('empty_if', 'App\Rules\EmptyIf@passes');
你将如何将参数传递给 Laravel Rule?
解决方案
这是一种更简单且更新的方法来完成此操作,而无需扩展验证器。您可以在 Rule 的构造函数中访问传递的参数,因此只需设置一个全局范围的变量,现在您可以在 pass() 方法中引用它。您甚至可以使用相同的方法在验证器消息中获取值。
验证调用:
case 'measurement':
$request->validate([
'updates.*.value' => [
new Measurement('foo-bar'),
],
]);
break;
规则:
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Measurement implements Rule
{
/**
* Create a new rule instance.
*
* @param $param
*/
public function __construct($param)
{
$this->type = $param;
}
public $type;
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @param array $parameters
* @return bool
*/
public function passes($attribute, $value)
{
dd($this->type, 'params');
return;
}
推荐阅读
- xml - 当 XSD 和 XML 都被验证时,QXmlSchema 和 QXmlSchemaValidator 给出错误
- php - 使用 Guzzle PHP 循环发送请求多次
- c# - Html.ValidationSummary 总是显示
- javascript - 如何通过javascript将视频添加到html页面
- javascript - Select2 未使用 Jquery 3.3.1 上的 jquery-validate 插件进行验证
- amazon-web-services - 是否有通过 CLI 启用 aws 守卫职责的脚本?
- java - 如何在不读取 Java 中的整个 JSON 文件的情况下仅获取特定键的值?
- angular - VS Code 中的 Angular:是否有任何自动重命名的方法?
- java - Tomcat 9 和 Java 11 上的 Soap Web 服务响应不同
- css - 将 css 应用于直接子元素