Вывод ошибок валидации формы

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
ifelse
Сообщения: 227
Зарегистрирован: 2013.02.05, 13:05

Вывод ошибок валидации формы

Сообщение ifelse »

У меня в одной форме почему то после валидации формы не выводит ошибки, в других формах по проекту всё окей.

Контроллер:

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

public function actionMyaction() {
    $model = $this->account_data;
    if (isset($_POST['Account'])) {
      $model->attributes = $_POST['Account'];
      $model->save();
    }
    var_dump($model->getErrors());
    $this->render('my-view', array(
      'model' => $model,
    ));
  }
Представление:

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

<?php
  /** @var BootActiveForm $form */
  $form = $this->beginWidget('bootstrap.widgets.TbActiveForm', array(
    'id' => 'myform',
  ));
  ?>
  <?php echo $form->errorSummary($model); ?>
  <?php echo $form->passwordFieldRow($model, 'old_password', array('class' => 'span3')); ?>
  <?php echo $form->passwordFieldRow($model, 'new_password', array('class' => 'span3')); ?>
  <?php echo $form->passwordFieldRow($model, 'password_repeat', array('class' => 'span3')); ?>
  <div class="form-actions">
    <?php $this->widget('bootstrap.widgets.TbButton', array('buttonType' => 'submit', 'label' => 'Изменить пароль', 'htmlOptions' => array('name' => 'change-password'))); ?>
  </div>
  <?php $this->endWidget(); ?>
Модель:

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

array('old_password, new_password, password_repeat', 'required'),
В контроллере $model->getErrors() нормально распечатывает ошибки, но вот в самой форме никаких признаков валидации нет- страница просто перезагружается.
stop4uk
Сообщения: 159
Зарегистрирован: 2012.12.18, 07:08

Re: Вывод ошибок валидации формы

Сообщение stop4uk »

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

$model->validate()

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

if (isset($_POST['ajax']) && $_POST['ajax']==='Account')
 {
      echo CActiveForm::validate($model);
      Yii::app()->end();
    }
if(isset($_POST[Account']))
            {
                $model->attributes=$_POST['Account'];
                if($model->validate()) {
                    $model->save();
                }
            }

Мб так стоит?
Аватара пользователя
ifelse
Сообщения: 227
Зарегистрирован: 2013.02.05, 13:05

Re: Вывод ошибок валидации формы

Сообщение ifelse »

В других местах работало и без validate, метод save же его вызывает, аякс в принципе не нужен. Приду домой попробую
Аватара пользователя
tsurka
Сообщения: 222
Зарегистрирован: 2012.05.07, 17:10
Откуда: Приднестровье
Контактная информация:

Re: Вывод ошибок валидации формы

Сообщение tsurka »

Попробуйте вывести error отдельно для одного поля.
Vladimir P
Сообщения: 60
Зарегистрирован: 2012.08.15, 15:41

Re: Вывод ошибок валидации формы

Сообщение Vladimir P »

Что такое

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

$model = $this->account_data; 
Может там какая проблема?

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

if (isset($_POST['Account'])) 
Точно срабатывает?
Аватара пользователя
ifelse
Сообщения: 227
Зарегистрирован: 2013.02.05, 13:05

Re: Вывод ошибок валидации формы

Сообщение ifelse »

Там храниться модель, которая грузится в базовом контролере. Я так же пробывал в контроллере загружать модель. Более того валидация то срабатывает, ошибки распечатывается в контроллере, а если я пытаюсь распечатать в представлении, то ошибок нет
Аватара пользователя
ifelse
Сообщения: 227
Зарегистрирован: 2013.02.05, 13:05

Re: Вывод ошибок валидации формы

Сообщение ifelse »

stop4uk писал(а):

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

$model->validate() 

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

if (isset($_POST['ajax']) && $_POST['ajax']==='Account')
 {
      echo CActiveForm::validate($model);
      Yii::app()->end();
    }
if(isset($_POST[Account']))
            {
                $model->attributes=$_POST['Account'];
                if($model->validate()) {
                    $model->save();
                }
            }

Мб так стоит?
Попробуйте вывести error отдельно для одного поля.
Добавил, не помогло
Аватара пользователя
ifelse
Сообщения: 227
Зарегистрирован: 2013.02.05, 13:05

Re: Вывод ошибок валидации формы

Сообщение ifelse »

Если распечатать поля в контроллере, то они заполнены данными из формы, но в представлении они уже пустые.
ApJIeKuHo
Сообщения: 191
Зарегистрирован: 2011.09.28, 11:21

Re: Вывод ошибок валидации формы

Сообщение ApJIeKuHo »

посмотрите в сторону модели и формы.
Стучитесь да откроется Вам, Молитесь да услышаны будете!
P.S.: Yii Jabber Conference: yii@conference.jabber.ru
Аватара пользователя
ifelse
Сообщения: 227
Зарегистрирован: 2013.02.05, 13:05

Re: Вывод ошибок валидации формы

Сообщение ifelse »

Собственно что смотреть то? :)
Аватара пользователя
ifelse
Сообщения: 227
Зарегистрирован: 2013.02.05, 13:05

Re: Вывод ошибок валидации формы

Сообщение ifelse »

Частично выяснил в чем проблема. Если в моделе в rules убрать свойство on, то валидация начинает работать

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

//      array('old_password, new_password, password_repeat', 'required', 'on' => 'edit-password'),
//      array('new_password', 'compare', 'compareAttribute' => 'password_repeat', 'on' => 'edit-password'),
      array('old_password, new_password, password_repeat', 'required'),
      array('new_password', 'compare', 'compareAttribute' => 'password_repeat'), 
Только проблема в том, что мне нужно использовать сценарий.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Вывод ошибок валидации формы

Сообщение ElisDN »

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

$model = $this->account_data;
$model->scenario = 'edit-password'; 
Аватара пользователя
ifelse
Сообщения: 227
Зарегистрирован: 2013.02.05, 13:05

Re: Вывод ошибок валидации формы

Сообщение ifelse »

Естественно я пробывал, в том числе и setScenario
Аватара пользователя
Barssoft
Сообщения: 726
Зарегистрирован: 2013.01.21, 16:03

Re: Вывод ошибок валидации формы

Сообщение Barssoft »

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

 $model = $this->account_data; 
может тут проблема, нужно попробовать вот так вот сделать

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

$model= new Account('Сценарий');
if(isset($_POST['Account'])){
$model->attributes = $_POST['Account'];
}
 
Так точно будет работать, а что у вас за $this->account_data этим параметром контроллера.
Аватара пользователя
ifelse
Сообщения: 227
Зарегистрирован: 2013.02.05, 13:05

Re: Вывод ошибок валидации формы

Сообщение ifelse »

Я так делал, мой последний вариант после экспирементов:

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

 public function actionChangepassword() {
//    $model = $this->account_data;
//    $model = GeneralAccount::model()->findByPk(Yii::app()->user->id);
    $model = new GeneralAccount('editpassword');
    $model->setScenario('editpassword');
    if (isset($_POST['GeneralAccount'])) {
      $model->attributes = $_POST['GeneralAccount'];
      $model->validate();
      $model->addError('old_password', 'test');
      $errors = $model->errors;
    }
//    d($errors);
    $this->render('change-password', array(
      'model' => $model,
      'errors' => $errors,
    ));
  }
 
$errors в представлении Null, если распечатать в Контроллере, то ошибки показывает
Аватара пользователя
Barssoft
Сообщения: 726
Зарегистрирован: 2013.01.21, 16:03

Re: Вывод ошибок валидации формы

Сообщение Barssoft »

У тебя в форма вызывается как

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

$this->renderPartial('_form',array('model'=>$model,'errors'=>$errors)); А далее ты делаешь что то типо print_r($errors);
и получаешь null?
Аватара пользователя
ifelse
Сообщения: 227
Зарегистрирован: 2013.02.05, 13:05

Re: Вывод ошибок валидации формы

Сообщение ifelse »

Нет, просто представлении change-password.php:

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

<?php
  $form = $this->beginWidget('bootstrap.widgets.TbActiveForm', array(
    'id' => 'horizontalForm',
    'type' => 'horizontal',
    'enableClientValidation' => false,
    'clientOptions' => array(
      'validateOnSubmit' => true,
      'hideErrorMessage' => false,
    ),
  ));
  ?>
<? d($model->errors); ?>
<? d($errors); ?>
  <?= $form->errorSummary($model); ?>
  <?= $form->textField($model, 'old_password') ?>
  <?= $form->textField($model, 'new_password') ?>
  <?= $form->textField($model, 'password_repeat') ?>

  <div class="form-actions">
    <?php echo CHtml::submitButton('Save Changes'); ?>
  </div>
  <?php $this->endWidget(); ?>
Ответить