您好我有以下型号:
class Mymodel extends AppModel {
public $validate = array(
'username' => array(
'required' => array(
'rule' => array('notEmpty'),
'message' => 'A username is required'
),
'regexp' => array(
'rule' => '/^[a-z0-9]{3,10}$/i',
'message' => 'Only letters and integers, min 3, max. 10 characters'
)
)
)
}
和以下视图:signup.ctp
<?php
echo $this->Form->create("Mymodel ");
echo $this->Form->input('username' ,array('label'=>"Username :"));
echo $this->Form->input('password' ,array('label'=>"Password :",'type' => 'password'));
echo $this->Form->end('signup');
?>
我的控制器是:
class MymodelController extends AppController
{
public function signup()
{}
}
cakePHP默认验证行为是在输入下面显示错误消息,所以我的问题是:如何在标签字段中显示错误,我的意思是:
用户名:(我想在此处显示错误消息)
答案 0 :(得分:1)
您可以使用$this->Form->error('fieldname')
在任何地方输出错误消息(为输入提供'error'=>false
参数,以防止它在默认位置输出错误消息。
例如: -
$error = $this->Form->isFieldError('username') ? $this->Form->error('username') : '';
echo $this->Form->label('username', "Username : $error");
echo $this->Form->input('username' ,array('label' => false, 'error' => false));
答案 1 :(得分:1)
如果可以在标签和输入之间放置错误消息,请通过format
选项更改输入的“元素”的顺序;
// Create the form. By setting options via the
// 'inputDefaults' option, the options are
// automatically applied to all inputs.
// of course, you can also set this option
// for each input individually
echo $this->Form->create("Mymodel", array(
'inputDefaults' => array(
// set the order of the 'elements' inside the input-div
'format' => array('before', 'label', 'error', 'between', 'input', 'after'),
// puts ':' between the label and the input
'between' => ':',
)
));
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->end('signup');
我还添加了一些额外的修改;
:
。这样做,您不必设置自定义标签答案 2 :(得分:0)
表单模板位于cake核心库中,我不建议更改其中任何一个。
如果您想继续使用
echo $this->Form->input('username' ,array('label'=>"Username :"));
与往常一样,您不必手动添加带错误的标签,而是使用javascript进行操作 以下是jquery中的一些代码,可以实现您想要的功能
$(function() {
$('.error-message').each( function(index) {
var errorText = $(this).text();
var label = $(this).siblings('label');
label.text(label.text() + errorText);
$(this).remove();
});
});
一定要测试一下,以防错过了什么。根据您的需要进行修改,添加一些样式等。
如果您想要无处不在,请在布局中插入脚本,否则将其添加到您想要的视图中。