私は 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) )
これよりも優れたアプローチ、またはこのソリューションの潜在的な問題はありますか?