0

我正在使用 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(...)

我想出的解决方案是

  1. 实现 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']优先。

  2. 使用 Joe Beeson 的模拟插件,将 MyForm 别名为 Form:

    public $helpers = array(
      'Analogue.Analogue' => array(
        array(
          'helper' => 'MyForm',
          'rename' => 'Form'
    ) ) )
    
  3. 然后,根据需要指定表单输入,如下所示:

    $this->Form->Input(
      'SomeModel.SomeField',
      array('required' => true)
    )
    

还有比这更好的方法,或者这个解决方案的潜在问题吗?

4

1 回答 1

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

于 2013-05-31T21:09:01.883 回答