割りとバッドノウハウなので、あまりおすすめできない記事です。

投稿フォームを作っていると、「名前 *」といった具合に、その項目が必須であることのサインをつけたくなることがある。
しかし、フォームヘルパーにはそういう機能はなく、ctpファイルを全て1つずつ手動で触っていかなくてはならない。
もし、大規模なシステムを作っていて、途中で「あ、やっぱこの項目は入力必須にしてください」とか言われたときに、テンプレートを一つ一つ書き換えて「*」印を足していくのは非常に面倒だろう。
ここでは、フォームヘルパーを拡張することで、入力対象のモデルのカラムがnullを許しているかどうかチェックし、それに応じて「*」マークを出力するヘルパーを作る。
1.Formヘルパーの拡張
まずはフォームヘルパーを拡張する。新しくExFormHelperというクラス名で、ExFormHelper.phpをHelperディレクトリに保存する。
次に対象コントローラでExFormヘルパーを読み込むように設定する。
var $helpers = array('AdminPage','ExForm'); |
2.テンプレートファイルの変更
今後はExFormを使用するため、$this->Formとなっている部分を全て$this->ExFormに変更。
<?php echo $this->ExForm->input('name'); ?> |
3.フォームヘルパーに以下のメソッドを挿入
class ExFormHelper extends FormHelper { function essentialTag($varName) { $modelName = $this->model(); if(!isset($this->_models[$modelName]->_schema[$varName])){ return null; } if ($this->_models[$modelName]->_schema[$varName]["null"]) { return null; } else { return '<spEan class="essential">*</span>'; } } } |
4.テンプレートファイルの好きな場所で使う
<th><?php echo $this->AdminForm->label('name'); ?><?php echo $this->AdminForm->essentialTag('name');?></th |
これで、指定したカラム(ここではname)のnullが許されていない場合には必須マークのタグが出力される。
#モデルのバリデーションルールを付け加え(入力時必須項目にする)、それを参照する形にしても良いかもしれません。
#結構強引な書き方をしているので、もっとスマートな解決方法があれば教えてください……。
コメントを残す