0

您好,我有以下型号:

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 默认验证行为是在输入下方显示错误消息,所以我的问题是:如何在标签字段中显示错误我的意思是这样的:

用户名:(我想在这里显示错误信息)

4

3 回答 3

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'); 

笔记

我还添加了一些额外的修改;

  • 'between' 选项可用于向您的输入添加其他内容,例如(参见代码):在标签和输入之间放置一个。这样做,您不必设置自定义标签
  • 如果输入的是一个名为“密码”的字段,CakePHP 将自动创建一个密码字段。您不必自己设置类型(除非您想将类型覆盖为“密码”输入以外的其他内容
于 2013-05-15T19:09:46.463 回答
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));
于 2013-05-15T14:28:31.407 回答
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();
    });
});

一定要测试它,以防我错过了什么。根据您的需要修改它,添加一些样式等。
如果您想在任何地方这样做,请将脚本插入布局中,否则将其添加到您想要的视图中。

于 2013-05-15T16:50:35.960 回答