Ajax валидация формы

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
Romchik
Сообщения: 19
Зарегистрирован: 2013.10.18, 20:43

Ajax валидация формы

Сообщение Romchik »

Знаю что это неоднократно обсуждалось на форумах, но конкретного решения я так и не нашел.
Вот есть у меня форма:

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

<?php $form=$this->beginWidget('CActiveForm', array(
        'id'=>'order-form',
        'enableAjaxValidation' => true,
        'enableClientValidation' => true,
        'clientOptions' => array(
            'validateOnSubmit' => true,
            'validateOnChange' => false,
        ),
    )); 

        <div class="row">
            <?php echo $form->labelEx($model,'name').'<br/>' ?>
            <?php echo $form->textField($model, 'name').'<br/>'; ?>
        </div>
        <div class="row">
            <?php echo $form->labelEx($model,'phone').'<br/>' ?>
            <?php echo $form->textField($model, 'phone').'<br/>'; ?>
        </div>
        <div class="row">
            <?php echo $form->labelEx($model,'email').'<br/>'; ?>
            <?php echo $form->emailField($model,'email').'<br/>'; ?>
        </div>

<?echo CHtml::submitButton('Выполнить', array('class' => 'to-order'))?>

<?php $this->endWidget(); ?>
?>
Затем в конроллере я пишу:

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

public function actionOrder() {
$model = new OrderForm;

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

        $this->renderPartial('order', array('model' => $model));
    }
Ну и моделька:

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

class OrderForm extends CFormModel
{
    public $name;
    public $phone;
    public $email;

    public function rules()
    {
        return array(
            array('name, phone, 'required'),
        );
    }

    public function attributeLabels()
    {
        return array(
            'name' => 'ФИО',
            'phone' => 'Ваш номер телефона',
            'email' => 'Ваш е-mail'
        );
    }
}
Вот я не пойму что я делаю не так, и вообще не пойму каков механизм работы данной аякс-валидации. Якобы при нажатии кнопки аякс должен выполнить actionOrder и если заданы Пост-данные, то должна пройти валидация и должен произойти вывод информации. Но при нажатии на кнопку происходит загрузка страницы (вовсе не аякс) и к тому же $_POST['ajax'], который я ожидаю, вообще не задается. В чем проблема то? jquery подключил в layout-те.
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: Ajax валидация формы

Сообщение Nafania »

У вас нет ни одного $form->error($model, ...), поэтому аякс валидация не работает.
Аватара пользователя
Romchik
Сообщения: 19
Зарегистрирован: 2013.10.18, 20:43

Re: Ajax валидация формы

Сообщение Romchik »

А причем тут отсутствие $form->error($model, ...) ??????? У меня не доходит до проверки

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

if(isset($_POST['ajax']) && $_POST['ajax']==='order-form')
        {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
 
Ответить