使用自定义FormHelper(cakephp 1.3)在div类中显式设置“required”

时间:2012-12-04 17:01:33

标签: php cakephp cakephp-1.3

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

我提出的解决方案是

  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的analogue plugin,将MyForm别名为Form:

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

    $this->Form->Input(
      'SomeModel.SomeField',
      array('required' => true)
    )
    
  4. 还有其他更好的方法,或者这个解决方案的潜在问题吗?

1 个答案:

答案 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