ja story of cakephp2.0

26
Story of CakePHP 2.0 2011.1.17 CakePHP CakePHP 新新新新新 新新 新新新新新 新新

Upload: hiroki-shimizu

Post on 24-May-2015

1.481 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Ja story of cakephp2.0

Story of CakePHP 2.0

2011.1.17

CakePHPCakePHP 新春勉強会 東京新春勉強会 東京

Page 2: Ja story of cakephp2.0

About Me

名前 : 清水 紘己 (hiromi2424)

職業 : Web 開発 ( フリーランス )

ライブラリ : github(Transition, ModularAuth)

活動 : 翻訳

趣味 : 歌、ビール!!!!!!

Page 3: Ja story of cakephp2.0

イントロダクションイントロダクション

Page 4: Ja story of cakephp2.0

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

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

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

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

イントロダクション

Page 5: Ja story of cakephp2.0

概要 疎結合化と委譲

リクエストとレスポンス Auth オブジェクトの動的な呼び出し その他

解決された数多くの問題 Security コンポーネント ページネーション より柔軟になったルーティング Lazy Loading

まとめ

Page 6: Ja story of cakephp2.0

疎結合化と委譲疎結合化と委譲

Page 7: Ja story of cakephp2.0

疎結合化と委譲

現在のリクエストの処理

リクエストとレスポンス

矛盾を生んでいたテストが困難醜い回避策継承が不可能

Page 8: Ja story of cakephp2.0

疎結合化と委譲

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

リクエストとレスポンス

同じオブジェクト共通の APIリクエストの解析便利なメソッド

Page 9: Ja story of cakephp2.0

疎結合化と委譲

リクエストとレスポンス

コントローラかどこかで $this->request->here

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

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

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

);

Page 10: Ja story of cakephp2.0

疎結合化と委譲

CakePHP 2.0 でのレスポンス処理

リクエストとレスポンス

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

強力な助っ人 メディアのレンダリング ダウンロード HTTP システム

Page 11: Ja story of cakephp2.0

疎結合化と委譲

Auth の責任が重すぎた

Auth

Post ログインの検証ログイン・ログアウト処理ユーザデータの読み込み数多くの権限処理パターン

DarkAuthOpenID と OAuth

Page 12: Ja story of cakephp2.0

疎結合化と委譲

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

Auth

Authentication と AuthorizationBasic 認証、 Digest 認証が既にコアに作られて

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

Page 13: Ja story of cakephp2.0

疎結合化と委譲

ObjectCollection の登場

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

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

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

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

Page 14: Ja story of cakephp2.0

疎結合化と委譲

コレクションの共通 API

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

ObjectCollection load() attached() trigger() other methods

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

Page 15: Ja story of cakephp2.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’); // 互換性のある呼び出し

Page 16: Ja story of cakephp2.0

疎結合化と委譲

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

その他

セッションハンドラーのオブジェクト化設定リーダーの登場 YAML 、 XML 、 JSONのような好きなフォーマットの設定

ファイルを読み込めるようになったエラーハンドラーと例外レンダラー cakeError() は例外のただのシミュレーションだった core の設定でどのクラスのメソッドを使うか指定できる

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

Page 17: Ja story of cakephp2.0

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

Page 18: Ja story of cakephp2.0

解決された数多くの問題

CSRF対策の改善

Securty コンポーネント

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

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

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

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

Page 19: Ja story of cakephp2.0

解決された数多くの問題

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

Securty コンポーネント

ワンタイムトークンしか使えなかったそれが不便なことがたびたびあった

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

Page 20: Ja story of cakephp2.0

解決された数多くの問題

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

ページネーション

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

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

Page 21: Ja story of cakephp2.0

解決された数多くの問題

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

ページネーション

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

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

'convertKeys' for PaginatorHelper::options() 他のルーティングパラメーターを含めることができ

るようになる

Page 22: Ja story of cakephp2.0

解決された数多くの問題

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

ページネーション

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

Model::hasMethod() が実装されたモデルの該当メソッドとほぼ同じ paginate() paginateCount()

Page 23: Ja story of cakephp2.0

解決された数多くの問題

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

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

ルーターは名前付き引数で配列を扱えなかった Router::url(array('named' => array()));=> named:Array /named[hoge][piyo]:fuga=> array('named[hoge][piyo]' => 'fuga')

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

Page 24: Ja story of cakephp2.0

解決された数多くの問題

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

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

1.3のカスタムルートは相対 URL しか扱えなかったfunction match($url) {

return '/users/login';}

2.xでは絶対 URL を扱えるようになったfunction match($url) {

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

Page 25: Ja story of cakephp2.0

解決された数多くの問題

様々な場所での Lazy Loading

Lazy Loading

モデルの読み込みはとてもコストが高いLazyModelコアで lazy loading をサポートするようになっ

た コンポーネント ヘルパー タスク アソシエーションモデル

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

Page 26: Ja story of cakephp2.0

まとめまとめ

数え切れないほどの変更の数々 PHPUnit DataSource の改善

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

してる 2.0 を使わない手は無い