CakePHP 3.0.0-RC1 がリリースされました

元記事はこちら
by lorenzo

新年を始める一番いい方法?最も発展した柔軟なCakePHPの新バージョンをあなたのプロジェクトでお使いいただけます!

CakePHPコアチームはCakePHP 3.0.0の最初のリリース候補版が入手可能になったことをお知らせいたします。ベータリリース以降懸命に改善してきました。コミュニティの皆さんの助力にも感謝しています。
改善のための奔走により、ベータ3からいくらかAPIを変更しました。先のバージョンで多くの欠点が見つかったバリデーションのサブシステム関連で特に多くの変更があります。3.0.0-rc1での変更点の概要は以下のとおりです:

バリデーションの改善

バリデーションプロセスは2つの段階に分かれています。最初の段階はユーザーが対面するタイプのバリデーションで、いつ、どこで実行するかという点を除けば先のリリース以降変更はありません。
先のバージョンでは、以下のように実行しました。


$article = $this->Articles->newEntity($this->request->data);

$this->Articles->save($article, ['validate' => 'myCustomValidatorName']);

しかし現在は、ユーザーが対面するタイプのバリデーションは保存時には実行されず、エンティティが作成された時点で実行されます。このため、newEntityメソッドもしくはpatchEntityメソッドにバリデーションオプションを渡す必要があります。


$article = $this->Articles->newEntity($this->request->data, [

    'validate' => 'myCustomValidatorName'

]);

$this->Articles->save($article);

バリデーションに失敗したフィールドは結果エンティティにコピーされないことに注意してください。

バリデーションの第二段階は、「アプリケーションルール」と呼んでいるもので、エンティティの保存もしくは削除の段階で実行されます。カラムの一意性、引数、外部キー制約など、アプリケーションの整合性をチェックするためのステップです。


// UsersTable.php にて

public function buildRules(RulesChecker $rules) {

    $rules->add($rules->isUnique('email'));

    return $rules;

}


アプリケーションルールは状態機械、ワークフローの状態など、ビジネスロジックの制約を強化するためにも使用できます。
validate() メソッドと validateMany() メソッドは Table クラスから削除されました。

アプリケーションルールシステムについての情報はこちら(英語)でさらにご覧になれます。

新しいエラーページ

例外スタックトレースを含むエラーページは、読みやすくエラー箇所を特定しやすいように再デザインされました。新しい外観はRails’ better errors pluginにインスパイアされたものです。

新しい Bake プラグイン

cake bake コマンドはプラグインになりました。これにより、コードの成長を早くし、新しいコードジェネレータや設定オプションを導入できます。
bake 関連の重要な変更点は、テンプレートの描画にCakePHPのビューシステムを使用するようになったことです。これにより、Bake.beforeRender や Bake.afterRender イベントを使用して bake の出力にリスナーをアタッチすることが可能になりました。

さらに、テンプレートの構文は読みやすくなるよう変更されました。これまでに使用していた bake テンプレートがあるなら、erbスタイルのタグを使用するようにアップデートする必要があります。Bake プラグインを入手するには、以下を実行します:
composer require cakephp/bake=dev-master --dev

そして、アプリケーションの bootstrap_cli.php ファイルでロードします。
Plugin::load('Bake');

テーブル不要のフォーム

多数のご要望により、ORMテーブルやエンティティを使用せずにスキーマやバリデーションを定義できる新しいフォームオブジェクトを導入しました。

public function add()

{

        $contact = new ContactForm();

        if ($this->request->is('post')) {

            if ($contact->execute($this->request->data)) {

                $this->Flash->success('We will get back to you soon.');

                return $this->redirect(['action' => 'add']);

            }

            $this->Flash->error('There was a problem submitting your form.');

        }

        $this->set('contact', $contact);

}


これについては、こちら(英語)でさらに情報を得られます。

PSR-2 の採用

わたしたちは最近、CakePHP とすべての公式プラグインで PSR-2 コーディングスタイル規約を採用しました。理由についてはこちらのブログ記事(英語)で読むことができます。

ORM 関連の改善

  • Query::firstOrFail() の追加
  • TranslateBehavior で、joinType の変更を許可
  • Table::addAssociations() により、一度に複数のアソシエーションを追加できるように実装
  • IS NOT 演算子のサポート
  • アソシエーションの別名が同じ場合でも matching() と contain() が呼び出せるようになった

コード、ドキュメントやフィードバックにより CakePHP 3.0 に関わってくれる皆さんに感謝します。バグや荒削りな部分がありましたら、Github でチケットをオープンしてご協力ください。

コメントを残す

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