CakePHP 3.1.0 がリリースされました

元記事はこちら

CakePHPコアチームはCakePHP 3.1.0が入手可能になったことをお知らせいたします。これは 3.1 のAPI安定版です。3.1 は3系のリリースの改善点を多く含んでいます。

3.1 の新機能

ORMの拡張

3.1の大きなポイントは、これまで以上にすばらしくなったORMです。

遅延イーガーローディング(Lazy Eager Loading)

アソシエーションを遅延イーガーロードできます。この機能により、条件付きエンティティの結果セット、エンティティまたはエンティティのコレクションに追加のアソシエーションの読み込みができます。

$articles = $this->Articles->find('popular')->all();

// 幾らかのロジックを実行したのち
// 追加のアソシエーションの読み込みができる
$withAuthors = $this->Articles->loadInto($articles, ['Authors']);

フィルタリングメソッドの追加

クエリオブジェクトの matching() をすでにご利用のことと思います。3.1では notMatching() メソッドを使用して 非マッチングのクエリを生成できます。

// コメントのない記事をfindする
$query = $this->Articles->find('popular')
    ->notMatching('Comments');

各関連のためにカラムをロードしなくても leftJoinWith() メソッドと innerJoinWith() メソッドを使用してアソシエーションのjoinを行なうことができます。これによりアソシエーションのフィルタリングが簡単に行えます。

$query = $this->Articles->find()
    ->innerJoinWith('Authors')
    ->where(['Authors.promoted' => true]);

メーラー

メーラーによりアプリケーション全体で再利用可能なメールを生成できます。1箇所で複数のEメール設定を記述できます。コードをDRYに保ち、メール設定のごちゃごちゃした記述をアプリケーションの他の箇所に集約するのに役立ちます。詳細はメーラーのドキュメント(英語)を参照してください。

テンプレートでの追加のテンプレート変数

アプリケーションのテンプレートで、さらにプレースホルダを追加し、それらのプレースホルダを入力項目の生成時に配置できます。

// テンプレートにヘルプのプレースホルダを追加
$this->Form->templates([
    'inputContainer' => '<div class="input {{type}}{{required}}">
        {{content}} <span class="help">{{help}}</span></div>'
]);

// 入力を生成し、help変数を配置
echo $this->Form->input('password', [
    'templateVars' => ['help' => 'At least 8 characters long.']
]);

Shellヘルパー

Shell ヘルパーにより複雑な出力生成コードを簡単に集約できます。Shell ヘルパーはどのシェルやタスクからも簡単にアクセス・使用できます。

// データをテーブルとして出力
$this->helper('table')->output($data);

// プラグインからヘルパーを取得
$this->helper('Plugin.HelperName')->output($data);

ヘルパーのインスタンスを取得したり、パブリックなメソッドを呼び出したりもできます。

// Progress ヘルパーの使用
$progress = $this->helper('Progress');
$progress->increment(10);
$progress->draw();

CakePHP は コマンドラインインターフェースをより見やすくするため、Progress ヘルパーと Table ヘルパーを提供します。

デフォルトアプリケーションスタイルの刷新

アプリケーション・スケルトンのスタイルが効率化され、小型のデバイスでのレンダリングが改善されました。見た目のクリーンさに加え、bakeテンプレートがクリーンなマークアップを生成するように調整されました。

../../../_images/3-1-bake-screenshot.png
新しいデフォルトスタイルがどんな感じか、少しお分かりいただけると思います。

3.0の重要な変更

以下のいずれの変更もメソッドのシグネチャは変更されていませんが、幾つかのメソッドは過去のものと若干振る舞いが異なります。

  • FlashComponent は set() メソッドや __call() メソッドを使用してセットされた Flash メッセージをスタックするようになった。これはセッションに保存されたFlashメッセージの構造が変更になったことを意味します。
  • 新しい設定ストレージが追加された。これはストレージクラス名を含むもので、AuthComponent はユーザーレコードを保持します。デフォルトで SessionStorage が使用されます。ステートレスの認証を使用する場合、代わりに MemoryStorage を使用するように AuthComponent を設定する必要があります
  • AuthComponent を設定して各コントローラの beforeFilter() コールバックが実行される前に認証チェックを行う場合、checkAuthIn オプションを使用できる。ステートレスの認証を使用する場合に便利です
  • RequestHandlerComponent はパースされた拡張子や startup() に代わって beforeRender() コールバックが取得した Accept-Type ヘッダによりレイアウトやテンプレートをスイッチする
  • HttpClient で、リクエストの送出時のデフォルトの MIME タイプが変更された。これまではいつも multipart/form-data が使用されていた。3.1ではファイルアップロードがある場合のみ multipart/form-data が使用されます。ファィルアップロードがないなら、application/x-www-form-urlencoded が使用されます

その他の拡張

  • デフォルトのルートクラスが cakephp/app レポジトリの DashedRoute に変更された。現在のコードは影響を受けないと思われるが、今後このルーティングクラスを使用することが推奨される
  • ヘルパー関数 breakpoint() が追加された。この関数は対話式コンソールでeval()に挿入できるコード片を提供する
  • Shell::dispatchShell() はシェルの割り当て時にWelcomeメッセージを出力しなくなった
  • JsonView と XmlView で、_serialized を true に設定することで、明示的にシリアライズする変数を指定するのではなく、すべてのビュー変数をシリアライズするよう設定できる
  • Time::fromNow() が追加された。このメソッドにより現在(’now’)からの差分を容易に取得できる
  • Time::i18nFormat() は日付書式に非グレゴリアンカレンダーもサポートするようになった
  • Validation::latitude() と Validation::longitude() の追加
  • Validation::ascii(), Validation::utf8(), Validation::isInteger() の追加
  • Cache::add() が2.x系より移植された。このメソッドは、キーが存在しない場合に自動的にデータをバックグラウンドでキャッシュに追加する
  • Time::listTimezones() がタイムゾーンの略号を表示するオプションをサポートするようになった
  • Hash::get() がArrayAccessオブジェクトをサポートするようになった
  • Hash::sort() で、大文字小文字を無視したソートのためのignoreCaseオプションをサポートするようになった

非推奨

CakePHP を改善し続けるために、幾つかの機能は非推奨になり、よりよい解決策に置き換えられています。非推奨になった機能は4.0までは削除されません。

  • SessionHelper は非推奨になった。$this->request->session() を直接使用できます
  • 以下のコントローラのプロパティは非推奨になった:
    • layout
    • view
    • theme
    • autoLayout
    • viewPath
    • layoutPath

    これらをコントローラで設定する代わりに、これらと同名の変数をビューにセットする。

3.1.0のすべての変更点については移行ガイド(英語)をお読みください。アップグレードを検討中のすべての皆さんが読むことをおすすめします。

アプリケーションのアップグレード

composerを使用して3.0から3.1にアップグレードする:

php composer.phar require 'cakephp/cakephp:3.1.*'
php composer.phar require 'cakephp/debug_kit:3.2.*'
php composer.phar require 'cakephp/bake:1.1.*'

これで新しいコアライブラリがインストールされ、bakeやDebugKitが更新されます。アプリケーションに非推奨の項目があれば処理してください。非推奨の機能は将来削除されます。アプリケーションのスケルトンで提供されているデフォルトのCSSを使用しているのであれば、最新のCSSをアプリケーションディレクトリに配置すれば、bakeテンプレートも更新されます。

いつもながら、問題報告やプルリクエストにより、このリリースの実現を支えてくれたコミュニティの皆さんに感謝します。

githubよりパッケージリリースのダウンロード

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です