ここではCakePHP2.xのControllerの簡単な解説をしていきます。
サンプルソース
<?php
class IndexController extends AppController {
// モデル
public $uses = array('User');
// コンポーネント
public $components = array('Cookie');
public function beforeFilter() {
parent::beforeFilter();
$this->set('title_for_layout', 'タイトル');
$this->setCss();
$this->setJavascript();
}
public function index() {
// post判定
if ($this->request->is('post')) {
// POST値 <input name="post" type="text">
$post = $this->request->data['post'];
// GET値 http://www.example.com/index?get=hoge
$hoge = $this->request->query['get'];
// URLから渡されたデータ http://www.example.com/index/param1/param2
$param1 = $this->request->pass[0];
$param2 = $this->request->pass[1];
// モデルの使用 $this->ModelName->functionName();
$this->User->getAll();
}
// 読み込むレイアウトの指定 app/View/Layouts/以下を指定
$this->layout = 'admin/indexFrame';
// 読み込むViewの指定 app/View以下を指定
$this->render('/admin/index');
}
/**
* ページ固有のCSS設定
*/
private function setCss() {
$arrCss = array();
// app/webroot/css/以下を指定
array_push($arrCss, 'admin/hage');
array_push($arrCss, 'admin/foo');
$this->set('arrCss', $arrCss);
}
/**
* ページ固有のJavascript設定
*/
private function setJavascript() {
$arrJavascript = array();
// app/webroot/js/以下を指定
array_push($arrJavascript, 'admin/Index');
$this->set('arrJavascript', $arrJavascript);
}
}
解説
public $uses = array(‘User’); (5行目)
使用するモデル名を配列で指定してください。
public $components = array(‘Cookie’); (7行目)
使用するコンポーネントを配列で指定してください。
※Sessionコンポーネントは指定しなくても読み込まれます。
public function beforeFilter() {} (9行目)
一番最初に実行されるブロックです。
parent::beforeFilter(); (10行目)
親クラスのpublic function beforeFilter() {}を実行する場合parent::beforeFilter();をコールしてください。
$this->set(‘title_for_layout’, ‘タイトル’); (11行目)
Viewファイルで使用する変数を設定します。
private function setCss() {} private function setJavascript() {} (42、53行目)
私の自作メソッドなので規約などはありません。
if ($this->request->is(‘post’)) {} (18行目)
POSTされたデータがあればtrueになります。
$post = $this->request->data[‘post’]; (20行目)
$_POST[‘post’]と同じ使い方です。
$hoge = $this->request->query[‘get’]; (23行目)
$_GET[‘get’]と同じ使い方です。
$param1 = $this->request->pass[0]; (26、27行目)
URLから渡されたデータ
URL/区切りで$this->request->pass[0]; 1,2,3・・・と格納されます。
$this->User->getAll(); (30行目)
コントローラー内public $uses = array(‘User’);で指定したモデル名->function名を使用します。
今回の例ではModelクラスにgetAllメソッドがあると仮定しています。
$this->layout = ‘admin/indexFrame’; (34行目)
Layoutファイル読み込み
/app/View/Layouts/から指定してください。
$this->render(‘/admin/index’); (36行目)
Viewファイル読み込み
/app/Viewから指定してください。