0

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

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

我希望将错误类应用于有问题的输入的标签,而没有下面的任何消息。

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

4

3 回答 3

2

FormHelper::input()有一个format选择。它是一个

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

默认输入格式顺序:array('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)
);

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

$this->Form->create(
    'MyModel',
    array(
        'inputDefaults' => array(
            'format' => array('before', 'label', 'between', 'input', 'after')
        )
    )
);
于 2012-12-10T23:02:28.483 回答
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));
于 2012-12-10T22:40:29.737 回答
0

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

$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(),等完成Form->checkbox()Form->select()这只是基本元素。

可以传递给的选项之一Form->create()inputDefaults您可以使用它来为所有其他表单元素设置默认值。这不会有多大帮助,因为您正在逐个领域进行操作。('error' => false会有所帮助)

您可以做的另一件事是制作自己的表单助手,扩展核心 FormHelper 并自定义输入法以自动完成这一切。您可以使用别名将您的自定义助手加载到$this->Form正常使用。请参阅本节的底部。

您也可以重载输入法,AppHelper但这不是一个好地方。

于 2012-12-11T00:54:08.577 回答