モデルの初期化プロセスは軽量化されました。 モデルのアソシエーションは遅延読み込みがされるようになり、多量のモデルやアソシエーションをもつアプリケーションは顕著に起動処理の時間を減少させることでしょう。
モデルは初期化プロセス時にデータベースのコネクションを必要としなくなり、find操作が発生するとき、またはカラムの情報が必要となった時のみ、データベースに初めてアクセスがなされます。
ビューは常に、 $this->output を通して最後に描画されたコンテンツ(ビューかレイアウト)を保持するようになりました。 ヘルパーで $this->_View->output を利用できます。 このプロパティを更新することでビューの描画から出てきたコンテンツを書き換えることができます。
getCrumbList() は <li> エレメントでラップされたぱんくずリストのリンクを生成します。 #856 を見てください。
このメソッドは設定ファイルを読み込むのに新しいリーダークラス(2.0 Configure をみてください)を使うようになりました。 省略可能ですが、二番目の引数としてパス(デフォルトは app/Config )を渡すことができます。 単純に、設定ファイル(とリーダー)を Controller::$helpers で設定することで、ヘルパーにコンストラクタで読み込むことができます(以下に例があります)。 設定ファイルでは、以下のキーを指定できます:
- tags キーと値を用いた配列
- minimizedAttributes リスト
- docTypes キーと値を用いた配列
- attributeFormat 文字列
- minimizedAttributeFormat 文字列
コントローラで設定ファイルを指定する方法の例:
public $helpers = array(
'Html' => array(
'configFile' => array('config_file', 'php') // 一つ目の方法:ファイル名とリーダー名の配列
'configFile' => 'config_file' // 二つ目の方法: ファイル名の文字列。PhpReaderが用いられます。
)
);
CakeRequest は2.0で導入された新しいクラスです。 このクラスは、共通に使われるリクエスト内部判定メソッドをカプセル化し、params配列をより有用なオブジェクトに書き換えます。 詳しくは CakeRequest を読んでください。
CakeResponse は2.0で導入された新しいクラスです。 このクラスは、アプリケーションのHTTPレスポンスの生成で共通に使われるメソッドとプロパティとカプセル化したものです。 これはCakePHPのいくつかの機能を統合したものです。 詳しくは CakeResponse を読んでください。
CakeSession と SessionComponent は数多くの変更があります。 詳しい情報は、セッションのセクションを見て下さい。
ルートオブジェクトはフルURLを返せるようになりました。 また、 Router はクエリ文字列とフラグメント識別子(訳注:#anchor_nameのこと)を付け加える以上のことはしません。 これは例えば、サブドメインやHTTPS/HTTPのフラグを扱うルートを作成するのに使用することができます。 以下はサブドメインをサポートするルートクラスの一例です:
class SubdomainRoute extends CakeRoute {
public function match($params) {
$subdomain = isset($params['subdomain']) ? $params['subdomain'] : null;
unset($params['subdomain']);
$path = parent::match($params);
if ($subdomain) {
$path = 'http://' . $subdomain . '.localhost' . $path;
}
return $path;
}
}
リンクを生成するときにサブドメインを指定するには、以下のようにします。
echo $this->Html->link(
'Other domain',
array('subdomain' => 'test', 'controller' => 'posts', 'action' => 'add')
);
上記はリンクを、http://test.localhost/posts/addをURLとして生成することでしょう。
Configure は様々なソースやフォーマットから設定ファイルを読み込むことができるように設定可能になりました。 /development/configuration セクションにはConfigureへの変更についてより詳しい情報があります。
引数無しで Configure::read() を呼ぶと、デバッグ値の代わりに、設定の全ての値を読み込むことができるようになりました。
CakePHP 2.0は 例外(Exception) と エラーハンドリング のハンドリングを再構築し、より柔軟に、より強い権力を開発者に与えます。
テキストの横幅の調整を便利にするものとして、 String::wrap() が追加されました。 これはシェルで Shell::wrapText() を使う時に必ず使われます。
コンポーネントはヘルパーやビヘイビアと同じような扱いを享受し、 Component がコンポーネントの基底クラスになりました。 詳しくはコンポーネントの変更を読んでください。
RequestHandler は CakeRequest の導入によりかなりの修正がありました。 また、この変更はいくつかの新しい機能を導入することも可能にしました。
もしクライアントが送ったAcceptが単一のMIMEタイプで、それに対応する拡張子が :php:class`Router` で有効となっているものと一致するならば、 RequestHandler はそれを拡張子と同じものとして扱うでしょう。 これはCakePHPのRESTスタイルのエンドポイントのサポートを拡張します。 この機能を使うには、まず app/Config/routes.php で拡張子を有効にしてください。
Router::parseExtensions('json', 'xml');
いったん拡張子に対応するビューとレイアウトを作成すれば、posts/view/1のようなURLにAccept: application/json を含んだヘッダーを送ることで、そのURLのJSONバージョンを受け取ることができるようになるでしょう。
CookieComponent はHTTPのみのクッキー制限をサポートするようになりました。 $this->Cookie->httpOnly = true; を設定することによってそれを有効とすることができます。 HTTPのみのクッキーにすることは、ブラウザーからクッキーにアクセスすることができないようにすることでしょう。(訳注:Javascriptなどから。参考: setcookie)
CakePHPは1.2からCSRF対策を持つようになりました。 2.0では既存のCSRFはより猜疑的なモードと、独立した機能を持つようになりました。 以前は、CSRF機能はフォームの改ざん対策とセットでした。 開発者はたびたびvalidatePostを動的なフォームの為に無効にしていましたが、CSRF対策も同時に無効化されていました。 2.0では、CSRFチェックはフォーム改ざん対策と分離され、強くコントロールすることができるようになりました。
詳しい情報は、 security-csrf を見てください。
コントローラはリクエストとレスポンスのオブジェクトを利用できるようになりました。 これらのオブジェクトについては、専用ページで詳しく見ることが出来ます。
CakePHP2.0のコンソールはほとんど完全に書き直されました。 いくつかの新機能、また後方非互換な変更が加えられました。 詳しくは、コンソールの変更を見てください。
ページネーションはページ付けに対して最大制限件数(maxLimit)を規定し、デフォルトは100です。
この制限はコントローラーでpaginate変数を用いて上書き可能です。
$this->paginate = array('maxLimit' => 1000);
このデフォルト値は、ユーザのURL操作で「limit」パラメータをとても大きな数値にしたリクエストのために、過大なデータベースの情報の引き出しを防ぐために提供されます。
あるクラスの代わりに独自のクラスを使うために、ヘルパー、コンポーネント、ビヘイビアは別名(訳注:エイリアス)を使うことができるようになりました。 これは、ビューで全ての $this->Html のインスタンスを置き換える必要なく MyHtml ヘルパーを作成することが、非常に簡単にできるようになったということです。 これを為すには、モデルでしていたのと同じように、クラスを用いた「className」キーを渡してください。
public $helpers = array(
'Html' => array(
'className' => 'MyHtml'
)
);
同様に、コントローラで使うためにコンポーネントを別名として使うことができます。
public $components = array(
'Email' => array(
'className' => 'QueueEmailer'
)
);
Emailコンポーネントを呼び出すことは、代わりにQueueEmailerを呼び出すことになるでしょう。 最後に、ビヘイビアでも別名呼び出しが可能です。
public $actsAs = array(
'Containable' => array(
'className' => 'SuperContainable'
)
);
2.0がコレクションを利用し、アプリケーションにまたがって共有することから、全てのエイリアス化されたクラスはアプリケーションの至る所で使用されるでしょう。 アプリケーションはいつでもエイリアスにアクセスを試み、それは独自のクラスにアクセスすることになります。 例えば、上記のようにHtmlをエイリアス化したとき、全てのHtmlヘルパーを使うヘルパーやエレメントはHtmlヘルパーを読み込み、MyHtmlを代わりに使うことになるでしょう。
新しいメソッド ConnectionManager::drop() が追加されました。 これは実行時にコネクションを削除することができます。