Проверка Yii2, разрешить несколько разных форматов - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу разрешить несколько форматов для поля в Yii2 ActiveRecord, например:

public function rules()
{
    return [
        ['date', 'date', 'format' => 'php:Y-m-d H:i'],
        ['date', 'date', 'format' => 'php:Y-m-d'],
    ];
}

Но, как это произойдет, произойдет сбой, если произойдет сбой любого из них.У меня есть какой-нибудь способ сделать это rules?

В настоящее время я думаю сделать это в beforeValidate как:

public function beforeValidate()
{
    $this->date = date('Y-m-d H:i', strtotime($this->date));
    return parent::beforeValidate();
}

Каков наилучший способ сделать это?

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Вы можете создать пользовательское правило, оно работает следующим образом.

Просто добавь по правилу

['date','datefunction']

public function datefunction($attribute,$params){
  $date      =   $this->$attribute;
/*****check validation******/

 $this->addError($attribute, "Date : $date  Format is wrong");
}

Примечание: вы можете получить ошибку исключения БД. Вам нужно изменить формат после сохранения файла.

0 голосов
/ 22 ноября 2018

Похоже, вы хотите сопоставить несколько форматов даты и времени? Попробуйте так:

['date', 'match', 'pattern' => '#^(?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)( ([01][0-9]|2[0-3]):([0-5][0-9]))?$#']
0 голосов
/ 16 ноября 2018

Вы можете сделать это, сделав функцию, например validateDateFormat() и обработав логику внутри нее, а затем в правилах, которые вы говорите ['date', 'validateDateFormat'], обратитесь к документации Yii для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...