てきとう

ワーワーゆうとります

CakePHP コントローラーの基本

class UsersController extends AppController {

 var $name = 'Users';
 var $helpers = array('Html','Form','Javascript');
 var $uses = 'Hogehoge';
 var $components = 'Foo';

 function Moge() {
 //ここに動き。
 }
}


・名前は基本的に自由ですが、わかりやすい名前にしましょう。
 (app/controllers/コントローラー名_controller.php)
・Classの定義では、AppControllerを継承します。
・$nameには、単語の頭文字が大文字のコントローラー名を定義します。
・$helpersには、使用するヘルパーを定義します。
 (HtmlとFormは未定義でも使用できますが、他のヘルパーを定義した場合は一緒に書きます。)
・$usesには、コントローラーで使うmodel名を書きます。基本的に書かなくても平気ですが、
念には念とか、複数のモデルを使いたいなぁという時に便利とか、そういう理由で書きます。
・$componentsには、使用するコンポーネントを定義します。
 実際にコントローラー内で使用する時は「$this->Foo->hoge1();」という感じで。
・アクションはコントローラーclassのメソッドとして登録します。
 「コントローラー名/アクション名」がURLになります。
・URLからアクセスしたくないメソッドは、名前の前に「_」を付加します。


★コールバック関数
コールバック関数を使うと、コントローラーのあらゆる挙動の前後に、処理をかませる事ができます。

beforeFilter
すべてのアクションの前に呼び出される処理を書くことが出来ます。
app_controller内に書くと、すべてのcontrollerで動きますが、
hoge_controller(作成したcontroller)でもbeforeFilterを作成すると上書きされます。
まぁextendsしてるんで、もちろんですけど

function beforeFilter()
 {
  //ここに処理。
 }

ちなみに

 if ($this->action != 'login')

などと書くと「login」というアクションの前だけは、こうしてね。という処理を書けます。

afterFilter
beforeFilterと同じで、この場合はアクションの後に呼び出されます。

beforeRender
アクションの処理が終了し、ビューをrenderする前に呼び出されます。