L5.6 — Проверка нескольких «правил» в операционной

Мне нужно проверить параметр ввода даты, называемый starttime, который можно передать в двух форматах: Y-m-d\TH:i:s или Y-m-d.

Теперь мой PHP-код проверяет только одно правило:

$validator = Validator::make($input_data, [
    'starttime'     => 'date_format:"Y-m-d\TH:i:s"',
]);

как я могу проверить starttime, используя два правила в OR?

Спасибо.


person vlauciani    schedule 02.05.2018    source источник
comment
Вы видели эту проблему? stackoverflow.com/questions/50134551/   -  person ysfkaya    schedule 02.05.2018
comment
какую ошибку вы хотите, если ни один не соответствует?   -  person Niklesh Raut    schedule 02.05.2018
comment
Возможный дубликат Проверка даты_формата Laravel 5.1 позволяет использовать два формата   -  person Niklesh Raut    schedule 02.05.2018
comment
Да, stackoverflow.com/questions/32006092/ может быть решением. Попробую на L5.6. Спасибо.   -  person vlauciani    schedule 02.05.2018


Ответы (1)


Я нашел решение, используя объекты правил:

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

use Illuminate\Support\Facades\Validator;

class StartOrEndDateRule implements Rule
{
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        $return1 = true;
        $return2 = true;

        /* Check validation on 'YYYY-MM-DD\THH:ii:ss' */
        $validator = Validator::make([$attribute => $value], [
            $attribute      => 'date_format:"Y-m-d\TH:i:s"',
        ]);
        if ($validator->fails()) {
            $return1 = false;
        }

        /* Check validation on 'YYYY-MM-DD' */
        $validator = Validator::make([$attribute => $value], [
            $attribute      => 'date_format:"Y-m-d"',
        ]);     
        if ($validator->fails()) {
            $return2 = false;
        }

        /* Check value to return */
        if ( $return1 === false && $return2 === false ) {
            return false;
        } else {
            return true;
        }
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The ":attribute" does not match the format "Y-m-d\TH:i:s" or "Y-m-d"';
    }
}

и в контроллере:

$validator = Validator::make($input_data, [
    'starttime'     => [new StartOrEndDateRule],
]);
person vlauciani    schedule 02.05.2018