コントローラの基本

Posted by muchag | CakePHP |
初回投稿:2011-05-14 (土) 19:25:20 | 最終更新:2011-06-19 (日) 19:19:48

MVC の C に当たる コントローラ

The CakePHP 1.3 Book:2.4.3 コントローラの規約

【環境】
[CakePHP] 1.3.8
役割

モデル から受け取った情報を処理・加工
および
ユーザからのリクエストを受け付け、それに沿った処理
そして、結果を ビュー へ渡す。
 

ネーミング

The CakePHP 1.3 Book:2.4.1 ファイルとクラス名の規約
自由。
 
解説サイトを見ると名詞の複数形になっているから
それがいいのかなぁ。
例) users

便利サイト:CakePHP 規約ワードメーカー

ファイル名

コントローラ名_controller.php
とする。
例) users_controller.php

クラス名

ファイル名を頭文字大文字で引っ付ける。
例) users_controller → UsersController
 

格納場所
app ディレクトリ/controllers

 

スケルトン
  1. <?php
  2. // app/controllers/users_controller.php
  3. class UsersController extends AppController
  4. {
  5.     var $name = 'Users';
  6.     var $uses = array('User');
  7.  
  8.     function index()
  9.     {
  10.         $this->set('users', $this->User->findAll(null, null, 'User.created ASC'));
  11.     }
  12.  
  13.     function show($category, $id)
  14.     {
  15.         /* 処理 */
  16.     }
  17. }

 

継承

コントローラは、必ず AppController クラスまたはそのサブクラスを継承すること。
 

AppController クラスを継承する場合
  1. class UsersController extends AppController {

 

AppController クラスのサブクラスを継承する場合

この手法を用いると、複数コントローラで設定を共有できる

ただし、その場合は、同名のプロパティやメソッドを上書きしてしまうので

cake ディレクトリ\libs\controller\controller.php

を参考に、マージさせる手法を考えなくてはならない場合も出てくる。

参考元サイト:tomstay’s memo CakePHPで独自の共通コントローラを継承させて使用する
 

app ディレクトリ\controllers\sample_controller.php 優先順位1

または

app ディレクトリ\sample_controller.php 優先順位2

を配置した上で

  1. App::import('Controller', 'Sample');
  2. class UsersController extends SampleController {

もちろん SampleController は AppController クラスを継承すること。
 

プロパティ
$name
  1. var $name = 'Users';

必須 項目。
これはコントローラ名。但し頭文字は大文字。
 

$uses
  1. var $uses = array('User');

使用する モデル

配列で書かれていることからも分かるように
複数指定できる。

  1. var $uses = array('User', 'Shop');

モデルを利用しない場合は空配列か false

  1. var $uses = array();
  2. または
  3. var $uses = false;

 

$components
  1. var $components = array('Email');

使用する コンポーネント
 

$helpers
  1. var $components = array('Ajax');

使用する ヘルパー

Html, Form, Session ヘルパーは宣言しなくても利用可。
 

$layout
app\views\layout

内に設置したラッパーテンプレート。

設定しない場合は default.ctp が用いられる。

  1. $layout = 'sample';

とすることで sample.ctp が用いられる。
 

メソッド
定義済みメソッド

The CakePHP 1.3 Book:3.5.4 コントローラのメソッド
 

アクションメソッド

メソッドうちビューのための処理をするのが アクション

ビューとの関係

このアクションをそのまま ビュー の名前にすると
アクション内で明示しなくとも、自動的に当該ビューが用いられる。
 

  1. function index() {

もし、指定がなければ、自動的に

app ディレクトリ/views/users/index.ctp

のテンプレートで表示。
 

値の受け渡し

アクションに処理内容を記述し

  1. $this->set('変数名',);

で、ビューへ値を受け渡す。
 

一般メソッド

ビューに直接関連付けられていなくて
アクション内から呼び出すメソッド(内部処理関数)。

  1. $this->hoge();

という風に呼び出す。
 

命名規則

コントローラ関数名の先頭にアンダースコア(_)を付けることで、
CakePHP のコントローラメソッドを隠蔽することが可能です。

The CakePHP 1.3 Book:2.4.3 コントローラの規約

つまり、普通に命名してしまうとアクション名と勘違いされて
例の URL 規則に則り URL が成立してしまう。

そこで、内部処理関数には、先頭に _ (アンダースコア)を付加して命名する。

  1. function _hoge()

 

読み込み優先順位

コントローラファイルは、以下の3箇所に配置可能。
 

優先順位1
app ディレクトリ\controllers

コントローラの基本配置場所。

まずここを探して、ここにあれば終了。
なければ次を探す。
 

優先順位2
app ディレクトリ

途中に継承させるコントローラを置くことが多い。
(複数の末端コントローラに継承させたい設定や
beforeFilter などのメソッドを記述したコントローラ)

ここを探してあれば終了。
なければ次を探す。
 

優先順位3
cake ディレクトリ\libs\controller

こちらのフォルダにあるのは CakePHP の根幹ファイル。
要は、AppController, PagesController, Controller がここにある。

これらに機能を付加したい場合は、前述の1か2へコピーして記述する。
直接いじることは避ける。

最後にここを探す。
なければエラー。
 

同名のコントローラ

上記3箇所の内2箇所以上に同名のコントローラが存在する場合は
当然の如く、優先度の高いディレクトリのものが読み込まれ
それ以降のものは無視される。

Posted by muchag | CakePHP |
初回投稿:2011-05-14 (土) 19:25:20 | 最終更新:2011-06-19 (日) 19:19:48

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment