【问题标题】:Yii - Client Side Validation for TextareaYii - Textarea 的客户端验证
【发布时间】:2014-05-06 09:19:59
【问题描述】:

我是 yii 的新手,在我的 textarea 的客户端验证方面遇到了麻烦。我不确定我做错了什么,但由于某种原因,客户端验证不仅仅适用于这个 textarea。

以下是我的模型中的规则:

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,预期的字段是“TEXT”类型。

感谢任何帮助。谢谢

【问题讨论】:

  • 将此添加到您的视图中,它将向您显示验证失败的消息: echo $form->errorSummary($model);
  • 或试试这个:if($model-&gt;validate()) { .... } else { $errors = $model-&gt;getErrors(); var_dump($errors); //or print_r($errors) exit; }
  • 您好 Ronit,感谢您的回复。我尝试了您的第二个建议, var_dump($errors) 返回错误消息。不过,我仍然想知道,为什么我没有在客户端收到错误消息,这意味着为什么我无法立即在表单中看到错误消息。
  • 那么返回的错误是什么
  • 没什么。提交表单后,我被重定向到 /feedback/default/create ,我可以在其中看到 var_dump($errors) 在空白页面中返回的内容

标签: php validation yii active-form


【解决方案1】:

$form-&gt;textarea() 中删除'id'=&gt;'feedback_content'。 CActiveForm 它自己会为提交的表单创建 ID。对于您的文本区域 id 应该是 Feedback_content 而不是 feedback_content(区分大小写)。因为这可能是验证消息没有在视图中通知。输入errorSummary检查验证

 <?php echo $form->errorSummary($model); ?>

【讨论】:

  • 就是这样。删除 id 解决了这个问题。谢谢。
猜你喜欢
  • 2015-03-06
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 2015-05-31
相关资源
最近更新 更多