Yii — Проверка на стороне клиента для Textarea

Я новичок в yii и у меня проблемы с проверкой на стороне клиента для моей текстовой области. Я не уверен, что я делаю неправильно, но по какой-то причине проверка на стороне клиента не работает только для этого текстового поля.

Ниже приведены мои правила в моей модели:

public function rules()
{
    return array(
        array('content', 'required'),
        array('user_id, seen', 'numerical', 'integerOnly'=>true),
        array('datetime', 'safe'),
        array('id, user_id, content, datetime, seen', 'safe', 'on'=>'search'),
    );
}

Вот код на мой взгляд:

<?php $form=$this->beginWidget('TbActiveForm', array(
        'id'=>'post-form',
        'action'=>Yii::app()->createUrl('/feedback/default/create'),
        'enableClientValidation'=>true,
        'clientOptions'=>array(
            'validateOnSubmit'=>true,
        ),
    )); ?>
    <div class="modal-header">
        <a class="close" id="close_modal" onclick="idEmpty(event)">&times;</a>
        <h4>New Feedback</h4>
    </div>

    <div class="modal-body">
        <?php echo $form->textarea($model,'content', array('id'=>'feedback_content','class'=>'feedback_textarea')); ?>
        <?php echo $form->error($model,'content'); ?>
    </div>

    <div class="modal-footer">
        <div class="hint" style="float:left">
            <span style="color:red;font-weight: bold">Hint: </span>You can use <?php echo CHtml::link('markdown', 'http://daringfireball.net/projects/markdown/syntax'); ?> syntax!
        </div>
        <?php echo TbHtml::submitButton('Send Feedback', array('color' => TbHtml::BUTTON_COLOR_SUCCESS)); ?>
    </div>

<?php 
    $this->endWidget();
?>

и, наконец, это мой контроллер:

public function actionCreate()
{
    $model=new Feedback;
    if(isset($_POST['Feedback'])) {
        $model->attributes = $_POST['Feedback'];
        $model->user_id = Yii::app()->user->getId(); 
        $model->datetime = date("Y-m-d H:i:s");
        $model->seen = 0;
        if($model->validate()) {
            $model->save();
            $this->redirect(array('/dashboard'));
        }
        else
            echo 'cant validate';
    }

}

Если я попытаюсь нарушить правило для этого текстового поля, например, если я оставлю его пустым, я не получу надлежащего сообщения об ошибке и в конечном итоге получу сообщение «не могу проверить» (которое предназначено только для целей тестирования). Моя база данных - mysql, а предполагаемое поле имеет тип «ТЕКСТ».

Любая помощь приветствуется. Спасибо


person Ehsan Khaveh    schedule 06.05.2014    source источник
comment
добавьте это в свое представление, и оно покажет вам сообщения о неудачных проверках: echo $form-›errorSummary($model);   -  person SkillsIndexOutOfBounds    schedule 06.05.2014
comment
или попробуйте это: if($model->validate()) { .... } else { $errors = $model->getErrors(); var_dump($errors); //or print_r($errors) exit; }   -  person SkillsIndexOutOfBounds    schedule 06.05.2014
comment
Привет Ронит, Спасибо за ваш ответ. Я попробовал ваше второе предложение, и var_dump($errors) возвращает сообщение об ошибке. Я все еще задаюсь вопросом, почему я не получаю сообщение об ошибке на стороне клиента, то есть почему я не могу сразу увидеть сообщение об ошибке в своей форме.   -  person Ehsan Khaveh    schedule 06.05.2014
comment
так что это возвращенная ошибка   -  person SkillsIndexOutOfBounds    schedule 06.05.2014
comment
Ничего. После отправки формы меня перенаправляют на /feedback/default/create, где я вижу, что возвращает var_dump($errors) на пустой странице.   -  person Ehsan Khaveh    schedule 06.05.2014
comment
просто перейдите прямо к /feedback/default/create напрямую, вы получите сообщение об ошибке   -  person SkillsIndexOutOfBounds    schedule 06.05.2014
comment
Нет, у меня ошибок нет..   -  person Ehsan Khaveh    schedule 06.05.2014


Ответы (1)


Удалить 'id'=>'feedback_content' из $form->textarea(). CActiveForm сам создаст идентификатор для заполненной формы. Идентификатор вашей текстовой области должен быть Feedback_content, а не feedback_content (с учетом регистра). Из-за этого может быть, что сообщение проверки не уведомляет в представлении. Поставьте errorSummary, чтобы проверить валидацию

 <?php echo $form->errorSummary($model); ?>
person Hearaman    schedule 06.05.2014
comment
Вот оно. Удаление идентификатора решило проблему. Спасибо. - person Ehsan Khaveh; 06.05.2014