cakephp2.doc_031
最終投稿日:2019年11月20日
【ビューへ値をセットする】
・タイトルタグを変更
$this->set("title_for_layout","hoge");
・1度だけのセッションを発行
$this->Session->setFlash(); ※CakePHP2.7 から廃止となります
例)
$this->Session->setFlash("システム処理に失敗しました。");
※引数
setFlash($message, $layout = ‘default’, $params = array(), $key = ‘flash’)
例)Bootstrap3 Calss を追加
$this->Session->setFlash("システム処理に失敗しました。"
,"default",array("class"=>"alert alert-danger"));
※View 側は、$this->Session->flash(); で出力する
【リクエストデータの取得】
GETデータ 引数のみの場合(controllers/action/hoge/foo/bar)
$this->request->pass
$this->request["pass"]
$this->request->params['pass']
※上記は全て結果は同じ
GETデータ key=Valueの場合(controllers/action?hoge=1&foo=2)
$this->request->query
【画面遷移関数】
//index 等
$this->render([遷移先]);
//リダイレクト
$this->redirect(array("controller"=>"hoges","action"=>"foo"));
例)
//パラメータも渡せる
this->redirect(array('action' => 'edit', $id));
//リファラーへリダイレクト
$this->redirect($this->referer());
【バリデーション】
//受け取ったデータをテーブルにセットする
$this->[テーブル名]->set($this->request->data);
//(validatesと「s」が付くのに注意)
if(!$this->[テーブル名]->validates()){
//描画を index に戻す
$this->render('index');
}
※コントローラにテーブル名を宣言するのを忘れずに!
cakephp2.3以降
モデルにバリデーションルールがあるだけで、
コントローラ側では何もしないでもバリデーション処理が走ってしまう。
理由年は、2.3からHTML5の requrired 属性が追加される仕様になったためで、
クライアント再度で処理されてしまう。
これを回避するには $this->Form->create の第2引数に以下を追加する。
"novalidate" => true
例)
echo $this->Form->create("Form",array("action"=>"confirm","novalidate" => true));
メモ)
バリデーションの validates() メソッドはデフォルトで $validate 変数を対象とします。
例えばモデル内に以下の2つのバリデーション設定があったとすると
public $validate = array(
"name" => array(
"notEmpty" => array("rule"=>"notEmpty","message"=>"名前を登録しろ"),
)
);
public $validate2 = array(
"name" => array(
"email" => array("rule"=>"email","message"=>"名前を登録しろ"),
)
);
コントローラでバリデーション処理の前に以下の記述をする事で
$validate2 を対象とする事ができる
$this->Hoge->validate = $this->Hoge->validate2;
メモ2)
共通画面を使用している場合、
バリデーションを一部無効にしたい場合は、Modelに設定した変数を空にする。
例)
$this->Hoge->validate['pass']=array();
メモ3)
View に強制的にエラー内容をセットする
例)
$this->[Model]->validationErrors[項目名][0] ="hoge...";
【フォーム】
//対象のフィールドの値を指定する
$this->request->data["モデル名"]["フィールド名"] = "値";
//セレクトボックス等の場合は配列でインデックスを指定
$this->request->data["モデル名"]["フィールド名"] = array("1","3");
【ページング】
基本的に同じだが、ビュー側の変数は「$this」オブジェクトとなる。
例)
//prefix がある場合は指定
$this->Paginator->options(array('url' => array("admin" => true)));
//件数等情報参照
$this->Paginator->counter(array('format' => "%start%件 ~ %end%件 (全 %count%件)"));
echo $this->Paginator->prev('<<',array("url"=>array("action"=>"index")));
echo $this->Paginator->numbers(array("modulus"=>2,"separator"=>"|"));
echo $this->Paginator->next('>>',array("url"=>array("action"=>"index")));
【ワンタイムトークン】
ワンタイムトークンは基本的に自作します。
< フォーム コントローラ側 >
//ランダムな文字列作成
$token = sha1(session_id() . mt_rand());
//セッションに格納
$this->Session->write("token",$token);
//ビューに渡す
$this->set("token",$token);
< ビュー側 >
//トークンを埋め込む
<?php echo $this->Form->input("token",array("type"=>"hidden","value"=>$token)); ?>
< 確認画面のコントローラ側 >
if(empty($this->request->data["Hoge"]["token"])
or $this->request->data["Hoge"]["token"] != $this->Session->read("token")){
//不正処理
echo "dame";exit;
}
//リロードを防止したければセッションを削除する
$this->Session->delete("token");
【ビューへ値をセットする】
・タイトルタグを変更
$this->set("title_for_layout","hoge");
【リクエストデータの取得】
GETデータ
$this->request->query
POSTデータ
$this->request->data
【バリデーション】
//受け取ったデータをテーブルにセットする
$this->[テーブル名]->set($this->request->data);
//(validatesと「s」が付くのに注意)
if(!$this->[テーブル名]->validates()){
echo "NG";
}
※コントローラにテーブル名を宣言するのを忘れずに!
cakephp2.3以降
モデルにバリデーションルールがあるだけで、
コントローラ側では何もしないでもバリデーション処理が走ってしまう。
理由年は、2.3からHTML5の requrired 属性が追加される仕様になったためで、
クライアント再度で処理されてしまう。
これを回避するには $this->Form->create の第2引数に以下を追加する。
"novalidate" => true
例)
echo $this->Form->create("Form",array("action"=>"confirm","novalidate" => true));
メモ)
バリデーションの validates() メソッドはデフォルトで $validate 変数を対象とします。
例えばモデル内に以下の2つのバリデーション設定があったとすると
public $validate = array(
"name" => array(
"notEmpty" => array("rule"=>"notEmpty","message"=>"名前を登録しろ"),
)
);
public $validate2 = array(
"name" => array(
"email" => array("rule"=>"email","message"=>"名前を登録しろ"),
)
);
コントローラでバリデーション処理の前に以下の記述をする事で
$validate2 を対象とする事ができる
$this->Hoge->validate = $this->Hoge->validate2;
【フォーム】
//対象のフィールドの値を指定する
$this->request->data["モデル名"]["フィールド名"] = "値";
//セレクトボックス等の場合は配列でインデックスを指定
$this->request->data["モデル名"]["フィールド名"] = array("1","3");
【ページング】
基本的に同じだが、ビュー側の変数は「$this」オブジェクトとなる。
例)
echo $this->Paginator->prev('<<',array("url"=>array("action"=>"index")));
echo $this->Paginator->numbers(array("modulus"=>2,"separator"=>"|"));
echo $this->Paginator->next('>>',array("url"=>array("action"=>"index")));
【ワンタイムトークン】
ワンタイムトークンは基本的に自作します。
< フォーム コントローラ側 >
//ランダムな文字列作成
$token = sha1(session_id() . mt_rand());
//セッションに格納
$this->Session->write("token",$token);
//ビューに渡す
$this->set("token",$token);
< ビュー側 >
//トークンを埋め込む
<?php echo $this->Form->input("token",array("type"=>"hidden","value"=>$token)); ?>
< 確認画面のコントローラ側 >
if(empty($this->request->data["Hoge"]["token"])
or $this->request->data["Hoge"]["token"] != $this->Session->read("token")){
//不正処理
echo "dame";exit;
}
//リロードを防止したければセッションを削除する
$this->Session->delete("token");