cakephp2.doc_050
R e i - D r e a m
for Laravel
TOP > CakePHP2 > CakePHP2 View関連
Guest
login

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

目次
○ CakePHP2 View関連
[View]の基本
エラーページ
例外の設定や独自ファイルの作成など.
エレメント
テンプレートの読込み設定
自作ヘルパー
ヘルパーの基本やサンプルなど.
CakePHP2 View関連
CakePHP2.x
【Controllerからデータを受け取る】

        [$this->data]
            //set しなくても取得可能
            $this->data[モデル名][各パラメータ名]

        [setされたデータ]
            $セットされた変数名


【バリデーションエラー】

    $this->Form->error("name1");
        //上手く取得できない場合は「テーブル名.カラム名」を設定してみる
    
    $this->Form->validationErrors["モデル名"]["項目名"][0]
        //これでも取得できた。。。


【Formヘルパー】

    //actionはモデル名のコントローラに自動的に設定される
    <?php echo $this->Form->create("Test",array("action"=>"form")); ?>

        ※画像を扱う場合は、「array("enctype"=>"multipart/form-data")」を追加

        ※adminルーティングする場合は、
        「array("action"=>"form","url"=>array("profiles"=>true))」って感じに。

        ※遷移先の Controller を変更したい場合は、以下の様に記述する

            //[mysamples]へ遷移する
            $this->Form->create("Image",array('url' => '/mysamples/image_confirm'));

        ※cakephp2.3x 以降
            //html5 のバリデート機能をオフにする
            第2引数 "novalidate" => true

        ※JavaScriptのアラートを表示される
            <?php echo $this->Form->create("Test",array(
                "action"=>"form","onsubmit"=>"return confirm('本当かな?')")); ?>

        【メモ】
            「$this->Form->create」にアラートを設置すると、
              例えば「戻る」ボタンを作成した場合もアラートが表示されてしまう。
            これを回避するには、「$this->Form->create」には、
             以下の様に絶対に submit されない様にする(Formのname属性を追加する)

                <?php echo $this->Form->create("User",array(
                    "name"=>"myform","action"=>"complate","onsubmit"=>"return false")); ?>

            そして、「登録」「戻る」ボタンは JavaScript で制御する。

                <?php echo $this->Form->button("戻る",array("onclick"=>"myconfirm(1)")); ?>
                <?php echo $this->Form->button("登録",array("onclick"=>"myconfirm(0)")); ?>
                //Controllerがどちらのsubmitか判断する用のカラム
                <?php echo $this->Form->hidden("sendvalue",array("id"=>"sendvalue")); ?>

                function myconfirm(i){
                    //サブミット先判別用オブジェクト
                    var mySend = document.getElementById("sendvalue");
                    if(i==1){
                        //[戻る]押下
                        //Controller が「戻る」と判断できる
                        mySend.value=1;
                        document.myform.submit();
                    }else{
                            myRet = confirm("保存しますか?");
                            if ( myRet == true ){
                                document.myform.submit();
                            }else{
                                return false;
                            }
                    }
                }


        [ テキストボックス ]
        <?php echo $this->Form->input("name",array(
            "label"=>"","size"=>"10","error"=>false)); ?>

        [ セレクトボックス ]
        ※onChangeでsubmitするには『"onChange"=>"return this.form.submit()"』と設定する
        <?php echo $this->Form->input("hoge1",array(
            "empty"=>"aaa","type"=>"select","label"=>""
            ,"options"=>array("2"=>"あ","3"=>"い","1"=>"う"))); ?>
         
        [ チェックボックス ]
        <?php echo $this->Form->input('hoge2',array(
            "multiple"=>"checkbox","options"=>array("1"=>"a","2"=>"b","3"=>"c"))); ?>

        [ ラジオボックス ]
        <?php echo $this->Form->radio('hoge3', array(1 => '男')); ?>
        <?php echo $this->Form->radio('hoge3', array(2 => '女')); ?>

        //ラジオ枠を消す例("legend"=>false ※文字列を指定すると枠線の名前として表示されます)
        <?php echo $this->Form->input('sex',array(
            'separator' => '<br />',"legend"=>false,"label"=>"","type"=>"radio"
            ,"options"=>array(1 => '男',2 => '女'))); ?>
                                                                                            

            ※javascriptに値を渡したい場合は、『"onchange"=>"test(this.value)"』を指定する。
        <?php echo $this->Form->input('sex2',array(
            "label"=>"","type"=>"radio","type"=>"radio","onchange"=>"test(this.value)"
            ,"options"=>array(1 => '男',2 => '女'))); ?>

        <script>
            function test(index){
                alert(index);
            }
        </script>


        [ テキストエリア ]
        <?php echo $this->Form->textarea("message",array(
            "cols"=>"40" ,"rows"=>"5","label"=>"")); ?>


        [ 戻るボタン等 ]
        <?php echo $this->Form->button("戻る",array(
            "name"=>"data[Test][back]","value"=>"1")); ?>
            ※name属性にControllerで判断しやすうような変数をセットする。


        【注意】
            Bootstrap4を適用すると file 型の input タグの表示が Form ヘルパーでおかしくなる。。。
            回避策としては、オプションで "div"=>false とする。


    <?php echo $this->Form->button('reset', array('type' => 'reset')); ?>
    <?php echo $this->Form->end("送信"); ?>


    < hidden値の設定 >

        [ テキストやプルダウン ]
            
【Htmlヘルパー】

    [ イメージ ]
    <?php echo $this->Html->image("icon.png") ?>
        //第2はwidth等のパラメータ(array("width"=>"",パラメータ))
        ※/webroot/img に保存されている画像を表示します

    [ リンク ]
    <?php echo $this->Html->link("[りんく]",array(
        "controller"=>"Tests","action"=>"form","1"),null,"よろしいですか?"); ?>
        ※第3引数にクラスやターゲット等を仕込める(array("target"=>"_blank"))
        ※4番めの引数はconfirm(javascript)です

        [ adminルーティング ]
            ※「"admin"=>true」でもOK
            <?php echo $this->Html->link("[りんく]",array(
                "controller"=>"Tests","action"=>"form","profiles"=>true); ?>

    [ リンク + イメージ ]
    <?php echo $this->Html->link($this->Html->image("icon.png")
        ,array("controller"=>"Tests","action"=>"form"),array('escape' => false)); ?>
    ※画像リンクの注意点として、$this->Html->imageを$this->Html->linkで
     囲うと画像がタグになるので、第3引数に『array('escape' => false)』を指定する


    [ URLの作成 ]
    <?php echo $this->Html->url(array("controller"=>"programs","action"=>"view")); ?>
    <?php echo $this->Html->url("http://www.yahoo.cp.jp"); ?>

    [ スタイルシートの読み込み ]
    //webroot/css/style.cssを読み込んでいる
    <?php echo $this->Html->css("style"); ?>

    [ JavaScriptの読み込み ]
    //webroot/js/test.jsを読み込んでいる
    <?php echo $this->Html->script("test"); ?>
            
ログインしてコメントを残そう!!


きっぷる
きっぷる