为什么Laravel 5.6中的自定义验证不起作用?

时间:2019-04-29 11:13:01

标签: php laravel

我用php artisan make:rule创建了一个自定义规则,将其设置在控制器中,但是它不起作用。可能是什么问题?

class CheckDeliveryDate implements Rule
{
    public $client_id;
    private $is_after_midday;
    private $error_messge;

    public function __construct(int $client_id)
    {
        $this->client_id = $client_id;
        $this->is_after_midday = Carbon::now()->greaterThan(Carbon::now()->midDay());
        $this->error_messge = 'Error';
    }

    public function passes($attribute, $value)
    {
        $delivery_date = Carbon::parse($value);

        if ($delivery_date->isToday()) {
            $this->error_messge = 'Error';

            return false;
        }
        if ($delivery_date->endOfDay()->isPast()) {
            $this->error_messge = 'Error';

            return false;
        }

        return true;
    }

    public function message()
    {
        return $this->error_messge;
    }
}

在控制器中,我设置了方法规则:

public function rules($client_id)
{
    return [
        'orders.*.positions.*.delivery_time' => [
            'required',
            'date',
            new CheckDeliveryDate($client_id)
        ],
    ];
}

当我存储订单时,validator-> fails()返回“ false”。

$validator = Validator::make(
    $request->all(),
    $this->rules($client_id)
);

我尝试在Rule中设置dd或dump,但不起作用。我的错误在哪里?

2 个答案:

答案 0 :(得分:0)

如laravel文档(https://laravel.com/docs/5.8/validation#custom-validation-rules中所述),您不应将参数传递给自定义规则实例。 Laravel为您做到了。

因此:

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
        ...
        .and()
            .authorizeRequests()
            .antMatchers("my-path/**").authenticatedWithUserPassword("user", "pswd")
    }

成为:

new CheckDeliveryDate($client_id)

祝你有美好的一天!

答案 1 :(得分:0)

JSON格式日期错误。这是一个了不起的错误...