CakePHP1.2で使える便利な5つの新機能

おかげさまでCakePHPガイドブックの売れ行きは好調のようです。
今回の書籍は主にCakePHP1.1を対象として解説を行っています。
現在CakePHPを利用している方の多くは1.1を利用しているであろう事と、正式版のリリースまではまだ時間があるであろうというのがその理由です。

追記)
CakePHPガイドブックの内容は1.1を基本にしていますが、1.2の機能を利用する為の章も設けてあります。


とはいえ10月22日にはCakePHP1.2のpre-betaがリリースされ、その完成度は着々と上がっています。
まだ1.2を使った事がない方も多いと思いますので1.2から利用できるさまざまな新機能からいくつかを紹介します。

1.エラー発生箇所のフレンドリーな表示

実際に開発を行っていると一回の作業で正しい記述のコードが書けるとは限りません。
命令の名前や変数の指定を誤ったりした場合はエラーメッセージを元にコード内を見て誤りを修正するのが通常の作業です。
CakePHP1.2ではエラー発生箇所のコードや処理の流れをsymfonyのようにブラウザ上で確認できるようになりました。


エラーが発生した際にPHP標準とはちょっと違う形のエラーメッセージと数字が表示されています。
Image3

この数字の部分をクリックする事でエラーの発生場所や処理の流れが確認できます。
Image4

全てのエラーがこれで正しく突き止められるわけではないですが、デバッグが楽になりそうです。

2.ページング機能

データの件数が多い場合はデータを20件ごとなどにページ分けして表示するのが一般的です。
CakePHP1.1ではこのような動作は自分で実装する必要がありました。特に管理画面などをscaffoldで作成した場合などはデータが多い場合などは使いづらくなっていました。
decorate.phpなどを使い強力なscaffoldを利用する事でも解決できますが、1.2ではページング機能が標準で追加されました。
scaffoldとしてコントローラーを作成するだけで、ソート機能付きのページングが利用できます。
またこの機能は自分で処理を実装する場合にも組み込めるようになっています。

Image5

ページングを自作した処理の中で利用する例
 'Member.created DESC');
    function listall() {
        $this->set('data', $this->paginate());
    }
}
3.複雑な設定が出来るようになったvalidate

CakePHPはモデル内の各項目に設定を行う事で入力値などの検査を行う事ができます。
しかし1.1ではこの部分を正規表現を使って設定する仕組みになっていた為、
「数値」と「アルファベット」かつ「10桁以内」で「空欄可」のようなルールを設定のみで検証する事が難しくなっていました。
1.2では設定項目が拡張され、下記のように複数の設定や任意のメソッドを組み合わせて検査ができるようになりました。

var $validate = array(
'title' => array(
    'required' => VALID_NOT_EMPTY,
    'length' => array( 'rule' => array('maxLength', 100))
    ),
'body' => VALID_NOT_EMPTY
);
4.Eメール送信機能

CakePHP1.2ではEメールを送信する為のコンポーネントが追加されました。
日本語の取り扱いについては工夫の余地がありますが、ヘッダ・フッタの挿入や添付ファイルの利用などを備えた統一的な方法でメールの送信を行う事が出来ます。

    $this->Email->to      = "ando@rikezemi.com";
    $this->Email->from    = "admin@example.com";
    $this->Email->subject = 'テストメール'; //エンコード処理は割愛
    $content[]            = 'あいうえお';   //エンコード処理は割愛
    $this->Email->send($content);
    //$this->Email->send($content,$template_name);
5.HTTPリクエスト生成・XML解析

外部のWebAPIなどからデータを取得し、解析する際に必要になるHTTPSocket,XMLなどのクラスが1.2から利用できるようになりました。
このような処理をPHPのバージョンに依存しない形で実装する事ができます。
もちろん使い慣れたライブラリやSimpleXMLなどを利用したい場合は独自に実装して何の問題もありません。

uses("http_socket","xml");
$socket = new HttpSocket();

$query = array(
  "Operation" => "ItemSearch",
  "Keywords" => "PHP",
);

$url = "http://example.com/api";
$response = $socket->get($url,$query);


まだ正式リリースまでは数ヶ月はかかると思いますが、上記で上げたような機能について悩んでいる方は1.2もあわせて試してみては如何でしょうか?
ここで取り上げていない新機能などについてはCakeSoftwareFoundationの発表資料をご覧ください。

1.2@OCPHP August 9,2007
http://cakephp.org/files/OCPHP.pdf