1 / 26

Story of CakePHP 2.0

2011.1.17 CakePHP 新春勉強会 東京. Story of CakePHP 2.0. About Me. イントロダクション. イントロダクション. 数多くの改善点をもつ CakePHP 2.0 もはや 1.x と比べて別物に見える しかし多くの互換性を保持してもいる ほとんどのライブラリやアプリケーションは簡単に移行できるとも言える. 概要. 疎結合化と委譲 リクエストとレスポンス Auth オブジェクトの動的な呼び出し その他. 解決された数多くの問題 Securityコンポーネント ページネーション より柔軟になったルーティング

mora
Download Presentation

Story of CakePHP 2.0

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2011.1.17 CakePHP新春勉強会 東京 Story of CakePHP 2.0

  2. AboutMe

  3. イントロダクション

  4. イントロダクション • 数多くの改善点をもつCakePHP 2.0 • もはや1.xと比べて別物に見える • しかし多くの互換性を保持してもいる • ほとんどのライブラリやアプリケーションは簡単に移行できるとも言える

  5. 概要 • 疎結合化と委譲 • リクエストとレスポンス • Auth • オブジェクトの動的な呼び出し • その他 • 解決された数多くの問題 • Securityコンポーネント • ページネーション • より柔軟になったルーティング • Lazy Loading • まとめ

  6. 疎結合化と委譲

  7. 疎結合化と委譲 リクエストとレスポンス 現在のリクエストの処理 • 矛盾を生んでいた • テストが困難 • 醜い回避策 • 継承が不可能

  8. 疎結合化と委譲 リクエストとレスポンス CakePHP 2.0でのリクエストの処理 • 同じオブジェクト • 共通のAPI • リクエストの解析 • 便利なメソッド

  9. 疎結合化と委譲 リクエストとレスポンス コントローラかどこかで • $this->request->here • $this->params[‘prefix’] // アクセスできるけど非推奨 • $this->request->data(‘User.name’); // nameを返す • $this->request->data('User.ip_address', $this->request->clientIp() );

  10. 疎結合化と委譲 リクエストとレスポンス CakePHP 2.0でのレスポンス処理 • HTTPレスポンスの処理はResponseオブジェクトを通して行われる • 強力な助っ人 • メディアのレンダリング • ダウンロード • HTTPシステム

  11. 疎結合化と委譲 Auth Authの責任が重すぎた • Postログインの検証 • ログイン・ログアウト処理 • ユーザデータの読み込み • 数多くの権限処理パターン • DarkAuth • OpenIDとOAuth

  12. 疎結合化と委譲 Auth Authは分割される(予定は未定) • Authentication と Authorization • Basic認証、Digest認証が既にコアに作られている • コアチームはOpenIDに対応しようと試みている

  13. 疎結合化と委譲 オブジェクトの動的な呼び出し ObjectCollectionの登場 • これまでは、種々のオブジェクトを読み込むための似たようなパターンが存在していた • コンポーネント、ヘルパー、タスクは動的に読み込むことができなかった • コレクションパターンがObjectCollectionに集約された

  14. 疎結合化と委譲 オブジェクトの動的な呼び出し コレクションの共通API • ObjectCollection • load() • attached() • trigger() • other methods • 互換性を持つattach()のようなメソッドもまた利用可能

  15. 疎結合化と委譲 オブジェクトの動的な呼び出し コントローラ内で • $this->Components->load('Cookie', array('name' => 'MyCookie')) コンポーネント内で • $this->Auth = $this->_Collection->load('Auth'); ビュー内で • $this->Time = $this->loadHelper(‘Time’); // 簡便メソッド • $this->Time = $this->Helpers->load('Time'); モデル内で • $this->Behaviors->load('Containable'); • $this->Behaviors->attach(‘Containable’); // 互換性のある呼び出し

  16. 疎結合化と委譲 その他 多数のクラスが委譲するようになった • セッションハンドラーのオブジェクト化 • 設定リーダーの登場 • YAML、XML、JSONのような好きなフォーマットの設定ファイルを読み込めるようになった • エラーハンドラーと例外レンダラー • cakeError()は例外のただのシミュレーションだった • coreの設定でどのクラスのメソッドを使うか指定できる • カスタムオブジェクトを使うことによって高度、自由な開発が可能

  17. 解決された数多くの問題

  18. 解決された数多くの問題 Securtyコンポーネント CSRF対策の改善 • CSRF対策は動的なフォームの生成を阻害していた • CSRF対策とフォーム改ざん対策が密に結合していた • CSRF対策を無効にすることはフォーム改ざん対策も無効にすることを意味していた • これらは独立した機能になった

  19. 解決された数多くの問題 Securtyコンポーネント マルチタイムトークンが利用可能に • ワンタイムトークンしか使えなかった • それが不便なことがたびたびあった • 今やSecurityコンポーネントは実用的な使い方ができるようになった

  20. 解決された数多くの問題 ページネーション ページネーションのGETメソッドのサポート • クエリ文字列の解析だけはサポートされていた • クエリ文字列の生成はサポートされていなかった • GETメソッドによるページネーションが完全にサポートされるようになった

  21. 解決された数多くの問題 ページネーション 新しいページネーションのオプション • $maxLimit • $limitが高すぎる値に設定されることを防ぐ • $paramType • GETメソッドの為に‘querystring’を指定できる • 'convertKeys' for PaginatorHelper::options() • 他のルーティングパラメーターを含めることができるようになる

  22. 解決された数多くの問題 ページネーション ビヘイビアでページネーションができるようになった • モデルでビヘイビアを通したメソッドが利用可能か調べる方法が無かった • Model::hasMethod()が実装された • モデルの該当メソッドとほぼ同じ • paginate() • paginateCount()

  23. 解決された数多くの問題 より柔軟になったルーティング 名前付き引数に配列が使えるようになった • ルーターは名前付き引数で配列を扱えなかった • Router::url(array('named' => array())); => named:Array • /named[hoge][piyo]:fuga => array('named[hoge][piyo]' => 'fuga') • 深い階層をもつ配列が使えるようになった

  24. 解決された数多くの問題 より柔軟になったルーティング フルURLが生成できるようになった • 1.3のカスタムルートは相対URLしか扱えなかった function match($url) { return '/users/login'; } • 2.xでは絶対URLを扱えるようになった function match($url) { return 'https://auth.example.com/users/login'; }

  25. 解決された数多くの問題 Lazy Loading 様々な場所でのLazy Loading • モデルの読み込みはとてもコストが高い • LazyModel • コアでlazy loadingをサポートするようになった • コンポーネント • ヘルパー • タスク • アソシエーションモデル • コントローラ直下のコンポーネントは遅延読み込みされない

  26. まとめ • 数え切れないほどの変更の数々 • PHPUnit • DataSourceの改善 ・・・などなど • コアチームは互換な方法を保持することに尽力してる • 2.0を使わない手は無い

More Related