Краткий справочник по валидации

Обсуждение документации. Переводы Cookbook и авторские рецепты.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Краткий справочник по валидации

Сообщение samdark »

Все стандартные правила валидации на одной странице.

http://yiiframework.ru/doc/cookbook/ru/ ... .reference
SpiLLeR
Сообщения: 350
Зарегистрирован: 2009.09.17, 16:47
Откуда: Санкт-Петербург
Контактная информация:

Re: Краткий справочник по валидации

Сообщение SpiLLeR »

Подскажите как работает CTypeValidator?
Есть поле birthday в БД типа datetime, пишу в модели array('birthday', 'type', 'dateFormat' => 'MM/dd/yyyy'), но видимо, что-то не так, т.к. проверка не происходит.
Предупрежден - значит вооружен.
devKP.ru
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Краткий справочник по валидации

Сообщение samdark »

Берётся строка на входе и валидатор при помощи CDateTimeParser::parse пытается её разобрать:

Код: Выделить всё

$valid=CDateTimeParser::parse($value,$this->dateFormat)!==false;
 
У вас ошибочка, вы указали 'type' как тип валидатора, а подразумевался, наверное, 'date'.
SpiLLeR
Сообщения: 350
Зарегистрирован: 2009.09.17, 16:47
Откуда: Санкт-Петербург
Контактная информация:

Re: Краткий справочник по валидации

Сообщение SpiLLeR »

Разобрался. Действительно надо было посмотреть код CTypeValidator.
Правильно указывать: array('birthday', 'type', 'type' => 'date'), и возможные варианты integer, float, string, date, time, datetime. Просто из рецепта не совсем понятно было, что указывать.
Предупрежден - значит вооружен.
devKP.ru
Fran
Сообщения: 2
Зарегистрирован: 2010.11.12, 12:34

Re: Краткий справочник по валидации

Сообщение Fran »

Доброго времени суток!

Есть форма, в которой имеются поля "основной" модели и "подчиненной" (has_many). При ошибке валидации в полях подчиненной модели, есссно происходит возврат к форме с сообщением об ошибке валидации в подчиненной модели ( Please fix the following input errors: * An error occured during the save of deliveryTypes ). При этом, в подчиненной модели для данных полей у меня установлено собственное, человекопонятное, сообщение.

Подскажите пожалуйста, как сделать чтобы отображалось нужное мне сообщение из подчинненной модели.
Спасибо!
Fran
Сообщения: 2
Зарегистрирован: 2010.11.12, 12:34

Re: Краткий справочник по валидации

Сообщение Fran »

Всем привет! Проблему решил подключением экстеншена (behavior) CSaveRelationsBehavior и допиливанием его так, чтобы он мог показывать ошибки валидации заданные в реляционных моделях при необходимости (по параметру). Кому интересно - пишите в личку.

P.S. Просьба к модераторам. Перенесите пожалуйста два моих поста из этой темы в "Свои сообщения для ошибок валидации" (viewtopic.php?f=8&t=11). Сначала не соориентировался... :)

Всем успехов!
youroff
Сообщения: 228
Зарегистрирован: 2010.02.25, 16:05

Re: Краткий справочник по валидации

Сообщение youroff »

Есть предложение добавить в описание CStringValidator параметра encoding, все-таки для нас это особенно актуально, а узнать, что его надо использовать, можно только столкнувшись с ошибкой... :)
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Краткий справочник по валидации

Сообщение samdark »

Добавлено.
friendrix
Сообщения: 2
Зарегистрирован: 2011.07.07, 23:00

Re: Краткий справочник по валидации

Сообщение friendrix »

Подскажите, в чем может быть дело - в правилах указываю array('username', 'authenticate','on'=>'login'), функция authenticate вообще не вызывается.
Убираю 'on'=>'login' - работает (но при регистрации соответственно тоже вызывается).
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Краткий справочник по валидации

Сообщение samdark »

Не так задан сценарий.
friendrix
Сообщения: 2
Зарегистрирован: 2011.07.07, 23:00

Re: Краткий справочник по валидации

Сообщение friendrix »

Ясно. Странно, что в документации в разделе правил валидации не сказано о setScenario. Так вполне логично подумать что сценарий завязан на текущем экшне.
x86-cRash
Сообщения: 3
Зарегистрирован: 2011.12.28, 13:52

Re: Краткий справочник по валидации

Сообщение x86-cRash »

Думаю, что подраздел под названием "Стандартные параметры", в котором описывается, как определяется каждое правило валидации, нужно разместить до подраздела "Выбор валидаторов". Так логичнее и последовательнее будет: сначала показали, как метод модели rules() возвращает набор правил валидации, затем рассказали о том, как описывается каждое правило валидации, и только потом описываем использование валидаторов и сценариев. Также можно переименовать в что-нибудь вроде: "Описание правила валидации", "Определение правила валидации" и т.п. Так тоже логичнее будет.
Аватара пользователя
vitovt
Сообщения: 210
Зарегистрирован: 2012.03.21, 10:37
Контактная информация:

Re: Краткий справочник по валидации

Сообщение vitovt »

Правильно ли я понимаю, что чтобы мне проверить поле "дата" мне надо написать такой сценарий?

Код: Выделить всё

array('client_birthday','date','format'=>'yyyy-mm-dd','allowEmpty'=>true,'message'=>'Выберите дату используя календарь'), 
и этот же сценарий проверит, пустое ли поле?
Аватара пользователя
vitovt
Сообщения: 210
Зарегистрирован: 2012.03.21, 10:37
Контактная информация:

Re: Краткий справочник по валидации

Сообщение vitovt »

Я вот заметил, что не все поля валидируются на лету, когда стоит

Код: Выделить всё

 'enableAjaxValidation'=>true, 
а некоторые вообще не валидируются. К примеру, я использую

Код: Выделить всё

zii.widgets.jui.CJuiAutoComplete
у меня есть такая форма

Код: Выделить всё

{assign var="form" value=$this->beginWidget('CActiveForm',[
          'id'=>'frm',    
          'enableClientValidation'=>true,      
          'enableAjaxValidation'=>true,
          'clientOptions'=>[
        'validateOnSubmit'=>true]
      ])}

      {assign var="autosaggest" value=$this->widget('zii.widgets.jui.CJuiAutoComplete', $autocompleteConfig)}
      {$form->error($model,'client_firstname')}
      {$form->textField($model,'client_id',['id'=>'client_id'])}
       {$form->error($model,'client_id')}
       {CHtml::submitButton('Далее')} 
       
      {assign var="endForm" value=$this->endWidget()} 
в модели есть правило

Код: Выделить всё

array('client_firstname', 'required', 'on'=>'suggest','message'=>'Необходимо ввести имя или фамилию существующего клиента'),
            array('client_id','required', 'on'=>'suggest','message'=>'Не выбран существующий клиент'),
             
так вот client_firstname валидируется а client_id никак нет!
Dima
Сообщения: 21
Зарегистрирован: 2013.02.16, 20:41

Re: Краткий справочник по валидации

Сообщение Dima »

а почему с правилом

Код: Выделить всё

array('title, text', 'type', 'type' => 'string'), 
проходят валидацию и числа?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Краткий справочник по валидации

Сообщение rak »

Dima писал(а):а почему с правилом

Код: Выделить всё

array('title, text', 'type', 'type' => 'string'),
проходят валидацию и числа?
Странно

Код: Выделить всё

$validator = new CTypeValidator();
$validator->type = 'string';
$resultInt = $validator->validateValue(123);
$resultString = $validator->validateValue("123");
var_dump($resultInt, $resultString);
//bool(false) bool(true)
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Краткий справочник по валидации

Сообщение lancecoder »

дата в request запросе не может быть int
Аватара пользователя
XAKEPEHOK
Сообщения: 38
Зарегистрирован: 2012.08.16, 13:11
Откуда: КМВ
Контактная информация:

Re: Краткий справочник по валидации

Сообщение XAKEPEHOK »

Еще не хватает упоминания о except в списке параметров
Большинство неправильных шагов совершаются стоя на месте
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Краткий справочник по валидации

Сообщение samdark »

Сюда https://github.com/samdark/yiiframework_ru_cookbook pull request сумеете сочинить?
Аватара пользователя
XAKEPEHOK
Сообщения: 38
Зарегистрирован: 2012.08.16, 13:11
Откуда: КМВ
Контактная информация:

Re: Краткий справочник по валидации

Сообщение XAKEPEHOK »

Сочинил
Большинство неправильных шагов совершаются стоя на месте
Ответить