【CakePHP2.0】投稿フォームに必須マークを自動で付けるヘルパー

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

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

投稿フォームを作っていると、「名前 *」といった具合に、その項目が必須であることのサインをつけたくなることがある。
しかし、フォームヘルパーにはそういう機能はなく、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が許されていない場合には必須マークのタグが出力される。

#モデルのバリデーションルールを付け加え(入力時必須項目にする)、それを参照する形にしても良いかもしれません。
#結構強引な書き方をしているので、もっとスマートな解決方法があれば教えてください……。

記事の品質向上のため、感想をお聞かせください。

  • 分かりやすかった・ためになった (0)
  • 分かりにくかった・ためにならなかった (0)
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)