Задать вопрос

Как валидировать массив данных в Yii?

Всем здравствуйте! Как правильно валидировать такой массив данных:
Array
(
    [firstName] => 
    [phone] => 
    [email] => 
    [productCode] => Array
        (
            [0] => 123
            [1] => 456
        )

)

Вот модель :
array(
                'productCode,
                firstName,
                 email,
                 phone', 'required', 'on' => self::getScenarioName( self::FORM_TYPE_REQUET_AVAILABILITY )
            ),
            array(
                'productCode', 'validateAttr', 'on' => self::getScenarioName( self::FORM_TYPE_REQUET_AVAILABILITY )
            ),

Как написать правильно этот валидатор validateAttr() ?

Вот форма на всякий случай:
<div class="row">
        <?php echo CHtml::activeLabel($model,'firstName'); ?>
        <?php echo CHtml::activeTextField($model,'firstName'); ?>
        <?php echo CHtml::error($model,'firstName'); ?>
    </div>

    <div class="row">
        <?php echo CHtml::activeLabel($model,'phone'); ?>
        <?php echo CHtml::activeTextField($model,'phone'); ?>
        <?php echo CHtml::error($model,'phone'); ?>
    </div>

    <div class="row">
        <?php echo CHtml::activeLabel($model,'email'); ?>
        <?php echo CHtml::activeTextField($model,'email'); ?>
        <?php echo CHtml::error($model,'email'); ?>
    </div>
    <table>
        <tr><th>Код товара</th><th>Количество</th><th>Замена</th></tr>
    <?php for($i =0; $i<2; $i++):?>
        <tr>
            <td>
                <?php echo CHtml::activeTextField($model,"productCode[$i]"); ?>
                <?php echo CHtml::error($model,"productCode[$i]"); ?>
            </td>
        </tr>
    <?php endfor; ?>
    </table>


И сам контроллер:
if( Yii::app()->request->getParam('Questions') ){
$count = count($_POST['Questions']['productCode']);
            for($i = 0; $i<$count; $i++){
                $model->firstName = $_POST['Questions']['firstName'];
                $model->email = $_POST['Questions']['email'];
                $model->phone = $_POST['Questions']['phone'];
                $model->productCode = $_POST['Questions']['productCode'][$i];
                $model->attributes=$_POST['Questions']['productCode'][$i];
                if( $model->validate() && $model->save() ){

                    $model->send();

                    echo 1;


                    Yii::app()->end();

                }
            }
}
  • Вопрос задан
  • 2325 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
SamDark
@SamDark
Yii2 core team
В документации описано: yiiframework.ru/doc/guide/ru/form.model

public function validateAttr($attribute,$params)
{
    $value = $this->$attribute;
    if (всё плохо) {
         $this->addError($attribute,'Всё плохо!');
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы