CakePHP2 でアプリを作ってみて気づいたCakephp1.3系との違い

CakePHP2 でアプリを作ってみて気づいたCakephp1.3系との違い

最近ソーシャルゲームはやってないですけど、iPhone ゲームの「僕の魔界を救ってにはまっているtanakaです。

最近CakePHP2で個人的に使うアプリを作っていて、1.x系との違いがいくつかわかってきたので、今日はそれを紹介します。

404 Not Foundなどのエラーレスポンスを本物の例外を使って出力するようになった

404や500などのエラー出力には今までController::cakeError() を使っていましたが、 2.0からはPHPの例外機構を使うようになりました。 CakePHP 1.x 系で例外を使っていないのは、1.x系ではPHP4をサポートしており、PHP4では 例外機構がなかったからでしょう。

一般的な使い勝手はそう変わらないです。

Before

<?php
// アクションメソッドの中で
$this->cakeError('error404');

After

<?php
// アクションメソッドの中で
throw new NotFoundException();

発行させたいエラーがそのまま例外クラス名になっていて、わかりやすくなったと思います。

CakeRequest オブジェクト

1.x系では、アクセスされたURLについては Controller::params, フォームからPOSTされた情報は Controller::data, HTTPメソッドがPOSTかGETなのか、はRequestHandlerComponent を使って判断していましたが、これらはすべてCakeRequestオブジェクト( Controller::request でアクセスできます )に集約されることになりました。

たとえば、ルーティングで次のように設定されていたとします

<?php
// app/Config/routes.php
Router::connect('/my_calendar/:year',
    array('controller'=>'my_calendar', 'action'=>'year'),
    array('year'=>'[0-9]{4}')
);

このとき、 ブラウザで /my_calendar/2011 にアクセスすると、 $this->request の中身は次のようになります。

CakeRequest Object
(
    [params] => Array
        (
            [plugin] => 
            [controller] => my_calendar
            [action] => year
            [year] => 2011
            [named] => Array
                (
                )

            [pass] => Array
                (
                )

        )

    [data] => Array
        (
        )

    [query] => Array
        (
        )

    [url] => my_calendar/2011
    [base] => 
    [webroot] => /
    [here] => /my_calendar/2011

....

ちょっとタイプ量が増えますが、使い勝手はあまりかわらないと思います。HTTPメソッドがGETかどうか判定するコードは

$this->RequestHandler->isGet();

から

$this->request->is('get');

になります。

ディレクトリ、ファイルの命名規則

いままではディレクトリ名、ファイル名は小文字・アンダースコアのみで構成されていました

  • controllers, models, views
  • home_controller.php, my_page_controller.php

これらは、ビューテンプレート以外ほとんど変更されています。

  • Controller, Model, View(ディレクトリ)
  • HomeController.php, MyPageController.php

まとめ

いま、CakePHP2で個人的なツールを作っていて(公開するようなツールではないです…)1週間くらいで感じた、大きな違いを3つピックアップしました。基本的に、CakePHP1.3 , 1.2 のユーザーであれば、すんなりと使えるようになると思います。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ