Страница 1 из 2

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

Добавлено: 2009.12.25, 13:37
samdark
Все стандартные правила валидации на одной странице.

http://yiiframework.ru/doc/cookbook/ru/ ... .reference

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

Добавлено: 2010.01.12, 23:19
SpiLLeR
Подскажите как работает CTypeValidator?
Есть поле birthday в БД типа datetime, пишу в модели array('birthday', 'type', 'dateFormat' => 'MM/dd/yyyy'), но видимо, что-то не так, т.к. проверка не происходит.

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

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

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

$valid=CDateTimeParser::parse($value,$this->dateFormat)!==false;
 
У вас ошибочка, вы указали 'type' как тип валидатора, а подразумевался, наверное, 'date'.

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

Добавлено: 2010.01.13, 00:18
SpiLLeR
Разобрался. Действительно надо было посмотреть код CTypeValidator.
Правильно указывать: array('birthday', 'type', 'type' => 'date'), и возможные варианты integer, float, string, date, time, datetime. Просто из рецепта не совсем понятно было, что указывать.

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

Добавлено: 2010.11.12, 12:45
Fran
Доброго времени суток!

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

Подскажите пожалуйста, как сделать чтобы отображалось нужное мне сообщение из подчинненной модели.
Спасибо!

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

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

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

Всем успехов!

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

Добавлено: 2011.01.18, 23:55
youroff
Есть предложение добавить в описание CStringValidator параметра encoding, все-таки для нас это особенно актуально, а узнать, что его надо использовать, можно только столкнувшись с ошибкой... :)

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

Добавлено: 2011.01.19, 01:00
samdark
Добавлено.

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

Добавлено: 2011.07.07, 23:06
friendrix
Подскажите, в чем может быть дело - в правилах указываю array('username', 'authenticate','on'=>'login'), функция authenticate вообще не вызывается.
Убираю 'on'=>'login' - работает (но при регистрации соответственно тоже вызывается).

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

Добавлено: 2011.07.07, 23:46
samdark
Не так задан сценарий.

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

Добавлено: 2011.07.08, 09:35
friendrix
Ясно. Странно, что в документации в разделе правил валидации не сказано о setScenario. Так вполне логично подумать что сценарий завязан на текущем экшне.

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

Добавлено: 2011.12.28, 15:37
x86-cRash
Думаю, что подраздел под названием "Стандартные параметры", в котором описывается, как определяется каждое правило валидации, нужно разместить до подраздела "Выбор валидаторов". Так логичнее и последовательнее будет: сначала показали, как метод модели rules() возвращает набор правил валидации, затем рассказали о том, как описывается каждое правило валидации, и только потом описываем использование валидаторов и сценариев. Также можно переименовать в что-нибудь вроде: "Описание правила валидации", "Определение правила валидации" и т.п. Так тоже логичнее будет.

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

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

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

array('client_birthday','date','format'=>'yyyy-mm-dd','allowEmpty'=>true,'message'=>'Выберите дату используя календарь'), 
и этот же сценарий проверит, пустое ли поле?

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

Добавлено: 2012.03.24, 23:21
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 никак нет!

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

Добавлено: 2013.03.20, 22:43
Dima
а почему с правилом

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

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

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

Добавлено: 2013.03.21, 00:00
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)

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

Добавлено: 2013.03.21, 07:21
lancecoder
дата в request запросе не может быть int

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

Добавлено: 2013.04.12, 16:17
XAKEPEHOK
Еще не хватает упоминания о except в списке параметров

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

Добавлено: 2013.04.12, 17:27
samdark
Сюда https://github.com/samdark/yiiframework_ru_cookbook pull request сумеете сочинить?

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

Добавлено: 2013.04.12, 19:02
XAKEPEHOK
Сочинил