我正在使用 cakephp 1.3,并且希望将表单输入明确设置为“必需”,而不是依赖模型验证。表单输入示例:
<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 的模拟插件,将 MyForm 别名为 Form:
public $helpers = array( 'Analogue.Analogue' => array( array( 'helper' => 'MyForm', 'rename' => 'Form' ) ) )
然后,根据需要指定表单输入,如下所示:
$this->Form->Input( 'SomeModel.SomeField', array('required' => true) )
还有比这更好的方法,或者这个解决方案的潜在问题吗?