我正在尝试自定义CakePHP 2.0表单助手上的错误输出。目前,表单在输入下方呈现错误消息,并将“错误”类应用于输入的标签。
我发现我可以为输入完全禁用错误报告,也可以输出错误类和消息。
我希望将错误类应用于违规输入的标签,而不显示以下任何消息。
如何关闭错误消息输出表单,但仍然会将错误类应用于违规标签?
答案 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
中重载输入法,但这不是一个好地方。