CakePHP2.0のコントローラ

しばらくCakePHP2.0に触ってなかったのですが、CakePHPもちょっと触らないうちに、バージョンも2.1.2になっていました。タイトルを2.1に変更するのも面倒ですので、CakePHP2.0のまま進めていきたいと思います。

1. CakePHPにはbakeという便利なコードジェネレータが付属しているのですが、基本を知らないままbakeを多用していると、ちょっとした変更にも手間取るということが発生する可能性があります。bakeを使わなくても一通りコードがかけるように基本を調べ直してみたいと思います。それでは、今日は、CakePHPのコントローラについて調べてみます。

2. それでは、まずコントローラの命名規則からです。ファイル名及びクラス名の各単語の先頭文字を大文字にする『キャメル記法』で記述します。

  • (例)ファイル名:app/Controller/SampleController.php
  • (例)クラス名:SampleController

3. コントローラクラスは、App::uses(‘クラス名’,’パッケージ名’)で、ライブラリをロードします。基本的には、Controllerパッケージにある『AppController』というクラスを継承するので、下記コードを最初に記述します。

App::uses(‘AppController’,’Controller’);

4.  デフォルトのアクション(メソッド)は、indexに設定されているので、まず、indexメソッドを作成します。

public function index(){
}

5.  CakePHPは、何も指定しないとデフォルトでapp/view/コントローラ名/index.ctpファイルを自動的にレンダリングしますので、下記のようなエラーが表示されます。下の例では、app/view/Sample/index.ctpファイルを作成して下さいとアラームが表示されています。

6. ビューを使わずにコントローラだけで表示するには、自動レンダリングをオフにします。サンプルコードを下記に表示します。

app/Controller/SampleController.php

<?php
App::uses('AppController','Controller');
class SampleController extends AppController{
public function index(){
 $this->autoRender=false;
 echo "<h1>サンプルページ</h1>";
 echo "<p>これはサンプルページです</p>";
 }
}

7. ブラウザで確認してみます。

8. これで、CakePHPでも、コントローラだけで表示できる方法が分かりました。それでは、今度はCakePHPの自動レンダリング機能を使って、ビューを表示してみましょう。

9. app/viewフォルダにSampleフォルダを作成します。その中にindex.ctpファイルを作成し、下記のコードを記述します。

<h1>サンプルページです</h1>
<p>これはビューのサンプルページです</p>

10. SampleController.phpのindexアクションの中身を全て削除して、ブラウザで確認してみます。index.ctpは文字しか入力していないのに、自動的にレイアウトが適用され、ヘッダー部分、コンテンツ部分、フッター部分に分かれています。デフォルトのレイアウトは、app/View/Layouts/default.ctpファイルが適用されています。

11. オートレイアウト機能を外すには、下記のコードを記述します。

$this->autoLayout=false;

12. これで、何もレイアウトが適用されない状態になります。尚、自作のレイアウトを適用したい場合は、app/View/Layoutsフォルダ内に通常のHTMLファイルを.ctp拡張子名で保存します。そして作成したレイアウトは下記のコードで適用します(例:Sample.ctp)

$this->layout=”Sample”;

13. レイアウト関係の詳しいことは後日調べてみます。今日の主題はコントローラですので、コントローラからビューへのデータの受け渡し方を調べてみます。コントローラからビューへデータを渡すには、下記のように記述します。

$this->set(“変数名”,”値”);

14. 受け渡された値は、ビューでそのまま変数名で使用できます。例えば、

$this->set(“name”,”WinRoad徒然草”);

をビューで表示するには、

echo $name;

とするだけです。

15. SampleController.phpとindex.ctpを下記に記述します。

app/Controller/SampleController.php

<?php
App::uses('AppController','Controller');
class SampleController extends AppController{
public function index(){
 $this->set("name","WinRoad徒然草");
 }
}

app/View/Sample/index.ctp

<h1><?php echo $name?></h1>
<p>これはビューのサンプルページです</p>

16. ブラウザで確認してみます。

コントローラからビューへのデータの受け渡し方法が分かったところで、簡単ですが、本日は以上です。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

コメントをどうぞ

このページの先頭へ