【问题标题】:CakePHP error message positionCakePHP 错误信息位置
【发布时间】:2013-01-19 01:56:25
【问题描述】:

已编辑

CakePHP 版本:2.2.4

当输入验证失败时,CakePHP 生成的错误消息位于我的输入元素之后

<div class="control-group">
    <label class="control-label">Name <span class="required-field">*</span></label>
        <div class="controls">
            <input name="data[User][name]" class="input-xlarge form-error" type="text" value="">
            <div class="error-message">This field cannot be left blank.</div>
            <input type="hidden" name="data[User][public_name]" id="UserPublicName_" value="0">
           <input type="checkbox" name="data[User][public_name]" class="span1" value="1">
        </div>
 </div>

但我想把它放在我的复选框之后,像这样:

<div class="control-group">
    <label class="control-label">Name <span class="required-field">*</span></label>
        <div class="controls">
           <input name="data[User][name]" class="input-xlarge form-error" type="text" value="">
           <input type="hidden" name="data[User][public_name]" id="UserPublicName_" value="0">
           <input type="checkbox" name="data[User][public_name]" class="span1" value="1">
           <div class="error-message">This field cannot be left blank.</div>
        </div>
 </div>

我已经阅读了FormHelper::input(),但我不知道该怎么做。我想使用inputDefaults

已编辑

我的.ctp

<div class="control-group">
    <label class="control-label">Nanme <span class="required-field">*</span></label>
        <div class="controls">
            <?php
               echo $this->Form->input('name', array(
                   'type' => 'text', 'class' => 'input-xlarge'));
               echo $this->Form->checkbox('public_name', array('class' => 'span1'));
            ?>
        </div>
</div>

【问题讨论】:

  • 你能发布你的 ctp 吗?我猜你有 2 个输入“name”和“public_name”。
  • @PitsanuSwangpheaw 我已经编辑了我的帖子。
  • 一般提示:在询问 CakePHP 问题时,您必须确定您使用的 CakePHP 版本。
  • @sємsєм 你是对的。谢谢。

标签: cakephp cakephp-2.2


【解决方案1】:

其实我已经解决了。我添加了'error' =&gt; false 并将错误消息定位在我想要的位置$this-&gt;Form-&gt;error()

我的.ctp

<div class="control-group">
  <label class="control-label">Nanme <span class="required-field">*</span></label>
    <div class="controls">
        <?php
           echo $this->Form->input('name', array(
               'type' => 'text', 'class' => 'input-xlarge', 'error' => false));
           echo $this->Form->checkbox('public_name', array('class' => 'span1'));
           echo $this->Form->error('User.name', null, array('class' => 'error-message'));
        ?>
    </div>
</div>

【讨论】:

    【解决方案2】:

    “复选框”输入类型应该已经将错误放在输入之后。

    但要指定确切的顺序,请在输入的 $options 数组中使用 format 键:

    $this->Form->input('fieldname', 
        array('type'=>'checkbox',
              'format'=>array('before', 'input', 'between', 'label', 'after', 'error')
    ));
    

    只需更改这些数组元素的顺序以匹配您的需要。

    【讨论】:

    • 谢谢,但我不知道如何对数组元素进行排序。此外,我想使用“inputDefaults”,这样我的所有复选框都会正确显示。
    • 'inputDefaults' 将适用于所有 input() 调用,而不仅仅是复选框。我不明白您订购元素的问题?您可以通过设置 'before' =&gt; '--before--', 'after' =&gt; '--after--', 等的值来进行一些测试,这样您就可以看到每个值出现在输出中的位置。
    【解决方案3】:
    1. 在你的控制器中使用下面的语法

       if($this->{$this->pageModel}->validates())
       {
          // your code....
       }
       else{
             // your errors 
          $errors = $this->{$this->pageModel}->validationErrors;
          $this->set('errors',$errors);
       }
      
    2. 在您的 ctp 文件中,将下面的代码放入您要显示错误消息的位置

      if(isset($errors) && !empty($errors['fieldname']))
      { 
          echo $errors['fieldname'][0];
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      • 2015-05-16
      • 2021-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多