2011 1 17 cakephp
Download
Skip this Video
Download Presentation
Story of CakePHP 2.0

Loading in 2 Seconds...

play fullscreen
1 / 26

Story of CakePHP 2.0 - PowerPoint PPT Presentation


  • 248 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Story of CakePHP 2.0' - mora


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
slide4
イントロダクション
  • 数多くの改善点をもつCakePHP 2.0
    • もはや1.xと比べて別物に見える
  • しかし多くの互換性を保持してもいる
    • ほとんどのライブラリやアプリケーションは簡単に移行できるとも言える
slide5
概要
  • 疎結合化と委譲
    • リクエストとレスポンス
    • Auth
    • オブジェクトの動的な呼び出し
    • その他
  • 解決された数多くの問題
    • Securityコンポーネント
    • ページネーション
    • より柔軟になったルーティング
    • Lazy Loading
  • まとめ
slide7
疎結合化と委譲

リクエストとレスポンス

現在のリクエストの処理

  • 矛盾を生んでいた
  • テストが困難
  • 醜い回避策
  • 継承が不可能
slide8
疎結合化と委譲

リクエストとレスポンス

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

  • 同じオブジェクト
  • 共通のAPI
  • リクエストの解析
  • 便利なメソッド
slide9
疎結合化と委譲

リクエストとレスポンス

コントローラかどこかで

  • $this->request->here
  • $this->params[‘prefix’] // アクセスできるけど非推奨
  • $this->request->data(‘User.name’); // nameを返す
  • $this->request->data(\'User.ip_address\',

$this->request->clientIp()

);

slide10
疎結合化と委譲

リクエストとレスポンス

CakePHP 2.0でのレスポンス処理

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

Auth

Authの責任が重すぎた

  • Postログインの検証
  • ログイン・ログアウト処理
  • ユーザデータの読み込み
  • 数多くの権限処理パターン
  • DarkAuth
  • OpenIDとOAuth
slide12
疎結合化と委譲

Auth

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

  • Authentication と Authorization
  • Basic認証、Digest認証が既にコアに作られている
  • コアチームはOpenIDに対応しようと試みている
slide13
疎結合化と委譲

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

ObjectCollectionの登場

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

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

コレクションの共通API

  • ObjectCollection
    • load()
    • attached()
    • trigger()
    • other methods
  • 互換性を持つattach()のようなメソッドもまた利用可能
slide15
疎結合化と委譲

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

コントローラ内で

  • $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’); // 互換性のある呼び出し
slide16
疎結合化と委譲

その他

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

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

Securtyコンポーネント

CSRF対策の改善

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

Securtyコンポーネント

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

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

ページネーション

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

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

ページネーション

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

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

ページネーション

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

  • モデルでビヘイビアを通したメソッドが利用可能か調べる方法が無かった
    • Model::hasMethod()が実装された
  • モデルの該当メソッドとほぼ同じ
    • paginate()
    • paginateCount()
slide23
解決された数多くの問題

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

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

  • ルーターは名前付き引数で配列を扱えなかった
    • Router::url(array(\'named\' => array()));

=> named:Array

    • /named[hoge][piyo]:fuga

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

  • 深い階層をもつ配列が使えるようになった
slide24
解決された数多くの問題

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

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

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

function match($url) {

return \'/users/login\';

}

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

function match($url) {

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

}

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

Lazy Loading

様々な場所でのLazy Loading

  • モデルの読み込みはとてもコストが高い
  • LazyModel
  • コアでlazy loadingをサポートするようになった
    • コンポーネント
    • ヘルパー
    • タスク
    • アソシエーションモデル
  • コントローラ直下のコンポーネントは遅延読み込みされない
slide26
まとめ
  • 数え切れないほどの変更の数々
    • PHPUnit
    • DataSourceの改善

・・・などなど

  • コアチームは互換な方法を保持することに尽力してる
  • 2.0を使わない手は無い
ad