cakephp2.doc_050
最終投稿日:2019年11月20日
【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"); ?>