4

所以我知道如果您根据模型的验证器对其进行验证,CakePHP 会自动将错误消息加载到视图中。我正在尝试设置日期保管箱验证,并且我想控制错误消息的显示位置。

在提交验证表单之前:

<div class="input text required">
<label for="UserEmail">Email</label>
<input name="data[User][email]" maxlength="50" type="text" id="UserEmail">
</div>

验证后,此处显示错误:

<div class="input text required error">
<label for="UserEmail">Email</label>
<input name="data[User][email]" maxlength="50" type="text" value="" id="UserEmail" class="form-error">
<div class="error-message">An email is required</div>
</div>

是否可以控制它显示在哪里?

<div class="input text required error">
<div class="error-message">An email is required</div>
<label for="UserEmail">Email</label>
<input name="data[User][email]" maxlength="50" type="text" value="" id="UserEmail" class="form-error">
</div>

或者在这里:

<div class="error-message">An email is required</div>
<div class="input text required error">
<label for="UserEmail">Email</label>
<input name="data[User][email]" maxlength="50" type="text" value="" id="UserEmail" class="form-error">
</div>
4

2 回答 2

5

在视图中:

1) 禁用自动错误显示:

echo $this->Form->create('Mymodel', array(
    'inputDefaults' => array(
        'error' => false
    )
));

2) 获取当前表单错误$this->validationErrors

3) 通过$this->Form->error()使用您自己的标记或 Cake 的默认标记将它们显示在您喜欢的任何位置

更新:我误解了你原来的问题。元素的顺序可以通过 create() 调用(应用于所有字段)或 input() 调用(用于单个字段)来指定:

echo $this->Form->create('Mymodel', array(
    'inputDefaults' => array(
        'format' => array('before', 'error', 'label', 'between', 'input', 'after')
    )
));

上面会将 div 放在errordiv 之前label。您可以按照您喜欢的任何顺序重新排列该数组。

于 2012-04-16T01:43:11.817 回答
0

我能够为password_confirm字段得到这个,也许它有帮助

         echo $this->Form->input('username');
        echo $this->Form->input('password');

        echo $this->Form->input('password_confirm', array(
            'type' => 'password',
            'div'=>'control-group',
            'error' => array('attributes' => array('wrap' => 'div','class' => 'help-inline'))
        ));

        echo $this->Form->input('group_id', array(
            'options' => array('2' => 'Admin', '3' => 'Publisher')
        )); 
        echo $this->Form->input('publisher_id', array(
            'options' => $publishers
        ));

        echo $this->Form->input('active');
于 2012-07-30T19:51:53.377 回答