2011 1 17 cakephp
This presentation is the property of its rightful owner.
Sponsored Links
1 / 26

Story of CakePHP 2.0 PowerPoint PPT Presentation


  • 197 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


2011 1 17 cakephp

2011.1.17

CakePHP新春勉強会 東京

Story of CakePHP 2.0


About me

AboutMe


Story of cakephp 2 0

イントロダクション


Story of cakephp 2 0

イントロダクション

  • 数多くの改善点をもつCakePHP 2.0

    • もはや1.xと比べて別物に見える

  • しかし多くの互換性を保持してもいる

    • ほとんどのライブラリやアプリケーションは簡単に移行できるとも言える


Story of cakephp 2 0

概要

  • 疎結合化と委譲

    • リクエストとレスポンス

    • Auth

    • オブジェクトの動的な呼び出し

    • その他

  • 解決された数多くの問題

    • Securityコンポーネント

    • ページネーション

    • より柔軟になったルーティング

    • Lazy Loading

  • まとめ


Story of cakephp 2 0

疎結合化と委譲


Story of cakephp 2 0

疎結合化と委譲

リクエストとレスポンス

現在のリクエストの処理

  • 矛盾を生んでいた

  • テストが困難

  • 醜い回避策

  • 継承が不可能


Story of cakephp 2 0

疎結合化と委譲

リクエストとレスポンス

CakePHP 2.0でのリクエストの処理

  • 同じオブジェクト

  • 共通のAPI

  • リクエストの解析

  • 便利なメソッド


Story of cakephp 2 0

疎結合化と委譲

リクエストとレスポンス

コントローラかどこかで

  • $this->request->here

  • $this->params[‘prefix’] // アクセスできるけど非推奨

  • $this->request->data(‘User.name’); // nameを返す

  • $this->request->data('User.ip_address',

    $this->request->clientIp()

    );


Story of cakephp 2 0

疎結合化と委譲

リクエストとレスポンス

CakePHP 2.0でのレスポンス処理

  • HTTPレスポンスの処理はResponseオブジェクトを通して行われる

  • 強力な助っ人

    • メディアのレンダリング

    • ダウンロード

    • HTTPシステム


Story of cakephp 2 0

疎結合化と委譲

Auth

Authの責任が重すぎた

  • Postログインの検証

  • ログイン・ログアウト処理

  • ユーザデータの読み込み

  • 数多くの権限処理パターン

  • DarkAuth

  • OpenIDとOAuth


Story of cakephp 2 0

疎結合化と委譲

Auth

Authは分割される(予定は未定)

  • Authentication と Authorization

  • Basic認証、Digest認証が既にコアに作られている

  • コアチームはOpenIDに対応しようと試みている


Story of cakephp 2 0

疎結合化と委譲

オブジェクトの動的な呼び出し

ObjectCollectionの登場

  • これまでは、種々のオブジェクトを読み込むための似たようなパターンが存在していた

  • コンポーネント、ヘルパー、タスクは動的に読み込むことができなかった

  • コレクションパターンがObjectCollectionに集約された


Story of cakephp 2 0

疎結合化と委譲

オブジェクトの動的な呼び出し

コレクションの共通API

  • ObjectCollection

    • load()

    • attached()

    • trigger()

    • other methods

  • 互換性を持つattach()のようなメソッドもまた利用可能


Story of cakephp 2 0

疎結合化と委譲

オブジェクトの動的な呼び出し

コントローラ内で

  • $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’); // 互換性のある呼び出し


Story of cakephp 2 0

疎結合化と委譲

その他

多数のクラスが委譲するようになった

  • セッションハンドラーのオブジェクト化

  • 設定リーダーの登場

    • YAML、XML、JSONのような好きなフォーマットの設定ファイルを読み込めるようになった

  • エラーハンドラーと例外レンダラー

    • cakeError()は例外のただのシミュレーションだった

    • coreの設定でどのクラスのメソッドを使うか指定できる

  • カスタムオブジェクトを使うことによって高度、自由な開発が可能


Story of cakephp 2 0

解決された数多くの問題


Story of cakephp 2 0

解決された数多くの問題

Securtyコンポーネント

CSRF対策の改善

  • CSRF対策は動的なフォームの生成を阻害していた

  • CSRF対策とフォーム改ざん対策が密に結合していた

  • CSRF対策を無効にすることはフォーム改ざん対策も無効にすることを意味していた

  • これらは独立した機能になった


Story of cakephp 2 0

解決された数多くの問題

Securtyコンポーネント

マルチタイムトークンが利用可能に

  • ワンタイムトークンしか使えなかった

  • それが不便なことがたびたびあった

  • 今やSecurityコンポーネントは実用的な使い方ができるようになった


Story of cakephp 2 0

解決された数多くの問題

ページネーション

ページネーションのGETメソッドのサポート

  • クエリ文字列の解析だけはサポートされていた

  • クエリ文字列の生成はサポートされていなかった

  • GETメソッドによるページネーションが完全にサポートされるようになった


Story of cakephp 2 0

解決された数多くの問題

ページネーション

新しいページネーションのオプション

  • $maxLimit

    • $limitが高すぎる値に設定されることを防ぐ

  • $paramType

    • GETメソッドの為に‘querystring’を指定できる

  • 'convertKeys' for PaginatorHelper::options()

    • 他のルーティングパラメーターを含めることができるようになる


Story of cakephp 2 0

解決された数多くの問題

ページネーション

ビヘイビアでページネーションができるようになった

  • モデルでビヘイビアを通したメソッドが利用可能か調べる方法が無かった

    • Model::hasMethod()が実装された

  • モデルの該当メソッドとほぼ同じ

    • paginate()

    • paginateCount()


Story of cakephp 2 0

解決された数多くの問題

より柔軟になったルーティング

名前付き引数に配列が使えるようになった

  • ルーターは名前付き引数で配列を扱えなかった

    • Router::url(array('named' => array()));

      => named:Array

    • /named[hoge][piyo]:fuga

      => array('named[hoge][piyo]' => 'fuga')

  • 深い階層をもつ配列が使えるようになった


Story of cakephp 2 0

解決された数多くの問題

より柔軟になったルーティング

フルURLが生成できるようになった

  • 1.3のカスタムルートは相対URLしか扱えなかった

    function match($url) {

    return '/users/login';

    }

  • 2.xでは絶対URLを扱えるようになった

    function match($url) {

    return 'https://auth.example.com/users/login';

    }


Story of cakephp 2 0

解決された数多くの問題

Lazy Loading

様々な場所でのLazy Loading

  • モデルの読み込みはとてもコストが高い

  • LazyModel

  • コアでlazy loadingをサポートするようになった

    • コンポーネント

    • ヘルパー

    • タスク

    • アソシエーションモデル

  • コントローラ直下のコンポーネントは遅延読み込みされない


Story of cakephp 2 0

まとめ

  • 数え切れないほどの変更の数々

    • PHPUnit

    • DataSourceの改善

      ・・・などなど

  • コアチームは互換な方法を保持することに尽力してる

  • 2.0を使わない手は無い


  • Login