如何在自定义验证规则的传递函数中发送多个参数

时间:2018-03-14 08:16:20

标签: laravel laravel-5.3

我正在实现一个自定义验证规则,该规则应该在自定义验证规则的传递函数中使用具有属性和值的另一个参数。当我们在编写自定义验证时实现Rule接口时,它不允许我们在pass函数中添加第三个参数,但我需要第三个参数。此外,如果有人能指导我在规则中包含数据库的最佳实践,我会感到高兴。如果我们需要自定义验证规则中的表,或者我们应该在验证规则中编写查询时使用Illuminate \ Support \ Facades \ DB,我们应该只在规则中包含所需的模型。我想要以下格式的传递函数

public function passes($attribute, $value,$extraparam)
{
    /*Code here*/
}

1 个答案:

答案 0 :(得分:2)

您可以将额外参数作为参数传递给Rule的构造函数

use App\Rules\Uppercase;

$request->validate([
    'name' => ['required', new Uppercase($param)],
]);

因此您可以将您的规则类修改为

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class Uppercase implements Rule
{
    protected $extraParam;

    public function __construct($param)
    {
        $this->extraParam = $param;
    }

    public function passes($attribute, $value)
    {
        // Access the extra param as $this->extraParam
        return strtoupper($value) === $value;
    }
}