我正在使用cakephp 1.3,并且希望将表单输入显式设置为“required”,而不是依赖于模型验证。表单输入示例:
<div class="input text required">
<label for="ClaimClaimantFirstName">First Name</label>
<input name="data[ClaimClaimant][first_name]" type="text" id="ClaimClaimantFirstName" />
</div>
我还想维护FormHelper命名而不是使用自定义表单帮助程序名称。例如:
$this->Form->input(...)
我提出的解决方案是
实现MyFormHelper,从FormHelper扩展并覆盖输入方法。具体来说,在FormHelper的第804行附近,替换
if (
isset($this->fieldset[$modelKey])
&& in_array($fieldKey, $this->fieldset[$modelKey]['validates'])
) {
$divOptions = $this->addClass($divOptions, 'required');
}
与
if (isset($options['required'])) {
if ($options['required'] === true) {
$divOptions = $this->addClass($divOptions, 'required');
} elseif ($options['required'] === false) {
// do not add class 'required'
}
} elseif (
isset($this->fieldset[$modelKey])
&& in_array($fieldKey, $this->fieldset[$modelKey]['validates'])
) {
$divOptions = $this->addClass($divOptions, 'required');
}
这确保在我们依赖模型验证之前,$options['required']
的存在优先。
使用Joe Beeson的analogue plugin,将MyForm别名为Form:
public $helpers = array(
'Analogue.Analogue' => array(
array(
'helper' => 'MyForm',
'rename' => 'Form'
) ) )
然后,根据需要指定表单输入,如下所示:
$this->Form->Input(
'SomeModel.SomeField',
array('required' => true)
)
还有其他更好的方法,或者这个解决方案的潜在问题吗?
答案 0 :(得分:0)
原始问题指定1.3,但这里是那些在2.0中寻找方法的人的更新
对于Cake 2.0或更高版本,您可以在输入选项数组中指定'required'=>true
密钥对值,以便对元素启用html5浏览器验证。
http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#creating-form-elements