CakePHP Form Helper - 显示错误类,但不显示错误消息

时间:2012-12-10 22:07:33

标签: cakephp

我正在尝试自定义CakePHP 2.0表单助手上的错误输出。目前,表单在输入下方呈现错误消息,并将“错误”类应用于输入的标签。

我发现我可以为输入完全禁用错误报告,也可以输出错误类和消息。

我希望将错误类应用于违规输入的标签,而不显示以下任何消息。

如何关闭错误消息输出表单,但仍然会将错误类应用于违规标签?

3 个答案:

答案 0 :(得分:2)

FormHelper::input()有一个format选项。这是一个

  

元素顺序的格式模板。任何不在数组中的元素都不在输出中。

     

默认输入格式顺序:数组('before','label','between','input','after','error')

您可以传递默认格式,而忽略'error'

echo $this->Form->input(
    'some_field',
     array('format' => array('before', 'label', 'between', 'input', 'after'))
);

这应该产生没有错误消息的输入标记。

如果要将其应用于表单中的多个输入,则应将其保持干燥状态:

$format = array('before', 'label', 'between', 'input', 'after');
echo $this->Form->input(
    'some_field',
     array('format' => $format)
);
echo $this->Form->input(
    'some_other_field',
     array('format' => $format)
);

还可以通过将格式传递给FormHelper::create()作为inputDefaults来设置表单的所有输入的默认格式:

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

答案 1 :(得分:0)

您必须手动执行此操作。首先关闭表单助手上的验证和标签生成。

echo $this->Form->input('myfield', array('error' => false, 'label' => false));

然后将类添加到创建标签,并在验证失败时添加错误类。要找出哪些验证失败,请检查invalidFields数组,如下所示:

$error = null;
if (isset($this->invalidFields['Model']['myfield'])) {
    $error = 'error';
}

echo $this->Form->label('myfield', 'My Field', array('class' => $error));

答案 2 :(得分:0)

您可以随时使用Form->error('field_name'),如果没有错误,则不会返回任何内容。

$error = $this->Form->error('field_name');
echo $this->Html->input('field_name', array(
    'class' => !empty($error) ? 'error' : null,
    'error' => false
));

现在,您可以使用通常标记的$ error来查找可能在其他位置显示的错误。

没有检查就没有办法解决,Form->input()方法是一种方便的方法,可以自动完成所有这些事情,例如错误,div,标签,可以通过Form->label(),{{1 }},Form->checkbox()等只是基本元素。

可以传递给Form->select()的其中一个选项是Form->create(),您可以使用它来为所有其他表单元素设置默认值。当你逐字逐句地做这件事时,这无济于事。 (inputDefaults会有所帮助)

您可以做的另一件事是创建自己的表单帮助程序,扩展核心FormHelper并自定义输入方法以自动执行此操作。您可以使用aliasing将自定义帮助程序加载到'error' => false以便正常使用。请参阅本节的底部。

您也可以在$this->Form中重载输入法,但这不是一个好地方。