ja story of cakephp2.0

Post on 24-May-2015

1.481 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Story of CakePHP 2.0

2011.1.17

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

About Me

名前 : 清水 紘己 (hiromi2424)

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

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

活動 : 翻訳

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

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

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

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

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

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

イントロダクション

概要 疎結合化と委譲

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

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

まとめ

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

疎結合化と委譲

現在のリクエストの処理

リクエストとレスポンス

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

疎結合化と委譲

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

リクエストとレスポンス

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

疎結合化と委譲

リクエストとレスポンス

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

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

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

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

);

疎結合化と委譲

CakePHP 2.0 でのレスポンス処理

リクエストとレスポンス

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

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

疎結合化と委譲

Auth の責任が重すぎた

Auth

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

DarkAuthOpenID と OAuth

疎結合化と委譲

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

Auth

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

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

疎結合化と委譲

ObjectCollection の登場

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

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

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

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

疎結合化と委譲

コレクションの共通 API

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

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

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

疎結合化と委譲

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

コントローラ内で $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’); // 互換性のある呼び出し

疎結合化と委譲

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

その他

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

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

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

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

解決された数多くの問題

CSRF対策の改善

Securty コンポーネント

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

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

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

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

解決された数多くの問題

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

Securty コンポーネント

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

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

解決された数多くの問題

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

ページネーション

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

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

解決された数多くの問題

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

ページネーション

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

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

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

るようになる

解決された数多くの問題

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

ページネーション

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

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

解決された数多くの問題

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

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

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

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

解決された数多くの問題

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

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

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

return '/users/login';}

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

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

解決された数多くの問題

様々な場所での Lazy Loading

Lazy Loading

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

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

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

まとめまとめ

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

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

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

top related