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 に答える