cakephp2.doc_053
R e i - D r e a m
for Laravel
TOP > CakePHP2 > View関連(自作ヘルパー)
Guest
login

最終投稿日:2019年11月20日

View関連(自作ヘルパー)
CakePHP2.x
【基本】
    [app][View][Helper]

    ファイル名は、頭大文字の任意文字 + Helper.php となる。
    例)
        MyformHelper.php

    <?php
        //AppHelper を読み込む
        App::uses('AppHelper', 'View/Helper');
        //AppHelper を継承したクラスを宣言する
        class MyformHelper extends AppHelper {

            //処理中に既存のヘルパーを使用したい場合はここで宣言する
            public $helpers = array('Form');

    [app][Controller]

        public $helpers = array('Html', 'Form','Myform');


【サンプル】
    <?php
        App::uses('AppHelper', 'View/Helper');
        
        class MyCheckHelper extends AppHelper {
            var $helpers = array('Form');
            //自作のメソッド
            public function input($fieldName, $options = array()){
                //チェックボックス
                if(isset($options["multiple"]) and $options["multiple"] == "checkbox"){
                    //普通にFormヘルパーで checkbox タグを生成する
                    $result = $this->Form->input($fieldName, $options);
                    //タグを改行文字で配列にする
                    $tags = explode("\n",$result);
                    $result = "";
                    foreach($tags as $val){
                        //対象の div タグがあれば処理(バリデートエラーの div もケアする)
                        if(strpos($val,'<div class="checkbox">') !== false 
                            or strpos($val,'<div class="checkbox form-error">') !== false){
                            //タグを削除する
                            $val = str_replace('<div class="checkbox">','',$val);
                            $val = str_replace('<div class="checkbox form-error">','',$val);
                            $val = str_replace('</div>','',$val);
                        }
                        //タグを結合する
                        $result .= $val;
                    }
                    //戻す
                    return $result;
                
                //セレクトボックス
                }else if(isset($options["type"]) and $options["type"] == "select"){
                    foreach($options["options"] as $key => $val){
                        //半角にする
                        $options["options"][$key] =  mb_convert_kana($val,"k","UTF-8");
                    }
                }
                //普通にFormヘルパーで select タグを生成する
                $result = $this->Form->input($fieldName, $options);
                return $result;
            }
        }
    ?>


【メモ】
    foreach($tags as $val){ の $tags をダンプすると以下となる

        array(6) {
          [0]=>
          string(133) "
          <div class="input select">
          <label for="TestHoge2">Hoge2</label>
                <input type="hidden" name="data[Test][hoge2]" value="" id="TestHoge2">"
          [1]=>
          string(0) ""
          [2]=>
          string(139) "<div class="checkbox">
                <input type="checkbox" name="data[Test][hoge2][]" value="1" id="TestHoge21">
                <label for="TestHoge21">a</label></div>"
          [3]=>
          string(139) "<div class="checkbox">
                <input type="checkbox" name="data[Test][hoge2][]" value="2" id="TestHoge22">
                <label for="TestHoge22">b</label></div>"
          [4]=>
          string(139) "<div class="checkbox">
                <input type="checkbox" name="data[Test][hoge2][]" value="3" id="TestHoge23">
                <label for="TestHoge23">c</label></div>"
          [5]=>
          string(6) "</div>
          "
        }


【本サイトで使用している自作ヘルパー】

    MyBsCssHelper

        CSSのフレームワーク『Bootstrap』用の Class を自動で出力する

            //ドキュメント上段のタイトル文字用
            $this->MyBsCss->input("CakePHP Auth 認証",array("bs_type"=>"title"))
            
            //[Back]リンク
            $this->MyBsCss->link("Back",array(
                "controller"=>"mycomponents","action"=>"cakephp_index"),array("bs_type"=>"back"))
            
            //ドキュメント内の各タイトル([target]は連番で記述していく)
            $this->MyBsCss->input("CakePHP1.3",array("bs_type"=>"index","target"=>1))
            
ログインしてコメントを残そう!!


きっぷる