CakePHPコアチームはCakePHP3.1.0 ベータが入手可能になったことをお知らせいたします。これは3系シリーズに幾つかの新機能を追加した3.1系の最初のリリースです。API定義が安定版になる前に、皆さまからのフィードバックをお受けしたいと思います。
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 ヘルパーを提供します。
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 が使用される。
- 以下のコントローラのプロパティは非推奨になった:
- layout
- view
- theme
- autoLayout
- viewPath
- layoutPath
これらをコントローラで設定する代わりに、これらと同名の変数をビューにセットする。
その他の拡張
- デフォルトのルートクラスが cakephp/app レポジトリの DashedRoute に変更された。現在のコードは影響を受けないと思われるが、今後このルーティングクラスを使用することが推奨される
- ヘルパー関数 breakpoint() が追加された。この関数は対話式コンソールでeval()を挿入する。
- Shell::dispatchShell() はシェルの割り当て時にWelcomeメッセージを出力しなくなった
- JsonView と XmlView で、_serialized を true に設定することで、明示的にシリアライズする変数を指定するのではなく、すべてのビュー変数をシリアライズするよう設定できる。
- Time::fromNow() が追加された。このメソッドにより現在(’now’)からの差分を容易に取得できる
- Time::i18nFormat() は日付書式に非グレゴリアンカレンダーもサポートするようになった
非推奨
CakePHP を改善し続けるために、幾つかの機能は非推奨になり、よりよい解決策に置き換えられています。非推奨になった機能は4.0までは削除されません。
- SessionHelper は非推奨になった。$this->request->session() を直接使用できる。
3.1.0ベータ以降深刻な問題がなければ、4−5週以内にリリース候補版や安定版のリリースを行います。3.1.0のドキュメントはbook(英語)やAPI(英語)を参照してください。
いつもながら、問題報告やプルリクエストにより、このリリースの実現を支えてくれたコミュニティの皆さんに感謝します。
githubよりパッケージリリースのダウンロード