0
コアライブラリの エレガントなハック 第 5 回 CakePHP 勉強会 @Tokyo ON 2010/5/29( 土 )
資料ファイル <ul><li>http://bit.ly/cakestudy_hiromi </li></ul>
About me <ul><li>名前 :  清水 紘己( Shimizu Hiroki ) </li></ul><ul><li>ひろみと呼んでください! @hiromi2424 </li></ul><ul><li>CakePHP に関する行動...
めにう <ul><li>導入 </li></ul><ul><li>Hacks </li></ul><ul><ul><li>コンポーネント </li></ul></ul><ul><ul><li>ヘルパ </li></ul></ul><ul><ul...
導入
どうしてハックするの? <ul><li>アプリケーションポリシーの埋め込み </li></ul>
どうしてハックするの? <ul><li>ディープデバッギング </li></ul>
どうしてハックするの? <ul><li>スタブ  ( モックオブジェクト ) </li></ul>
どうしてハックするの? <ul><li>アプリケーションポリシーの埋め込み </li></ul><ul><li>ディープデバッギング </li></ul><ul><li>スタブ  ( モックオブジェクト ) </li></ul>
どうやってハックするの? <ul><li>エイリアスみたいにマップされたオブジェクトを置換する </li></ul><ul><ul><li>このセッションではこれに焦点を当てます </li></ul></ul><ul><li>提供されてるフック...
ユーザーランドインポート <ul><li>App/libs/* </li></ul><ul><li>Core から App にコピー </li></ul><ul><li>置換、終了 </li></ul>Dirty Hack
不可能・エレガントでない <ul><li>Static Classes </li></ul><ul><li>Basic functions </li></ul>Use Lithium
Hacks
Hack components
Components - ACL <ul><li>提供されているフック </li></ul><ul><li>Configure::write('Acl.classname‘, ‘MyAcl’) </li></ul><ul><li>MyAclCo...
Components - Others <ul><li>マッピングされたオブジェクトの置換 </li></ul><ul><li>Component::_loaded[$key] </li></ul><ul><ul><li>オブジェクトへのリファ...
Components - Others <ul><li>Component class flow </li></ul>init() initialize() startup() プロパティ などの設定 オブジェクトのマッピング Starting...
Components - Others <ul><li>var $components = (‘Session’, ’Auth’, ‘Security’); </li></ul>初期化中 NO Auth initialized Undefine...
Components - Others <ul><li>$Component->enabled = boolean </li></ul><ul><li>SessionComponent::__construct($base) </li></ul...
Hack helpers
Helpers <ul><li>マッピングされたオブジェクトの置換 </li></ul><ul><li>$view::loaded[$key] </li></ul><ul><ul><li>オブジェクトへのリファレンス </li></ul></u...
Hacks Models
Models <ul><li>ClassRegistry::init() </li></ul><ul><li>alias option </li></ul><ul><li>Example </li></ul><ul><ul><li>ClassR...
Hacks CakeRoute
CakeRoute <ul><li>From 1.3 </li></ul><ul><li>(Plugin | App)/libs/routes/my_route.php </li></ul><ul><li>App::import(‘Lib’, ...
CakeRoute <ul><li>parse() </li></ul><ul><ul><li>アクセスされたURLをパラメータに解析 </li></ul></ul><ul><ul><li>パラメータの追加・削除などの手伝い </li></ul...
CakeRoute <ul><li>match() </li></ul><ul><ul><li>パラメータから正しいURLに変換する </li></ul></ul><ul><ul><li>リバースルーティング </li></ul></ul><u...
CakeRoute <ul><li>Example </li></ul><ul><ul><li>Mark Storyが素晴らしいサンプルを書いてくれました </li></ul></ul><ul><ul><li>リバースルーティングのコードを追加...
Engines
Cache <ul><li>(Plugin | App)/libs/cache/my_cache.php </li></ul><ul><li>Cache::config(‘default’, array(‘engine’ => MyCache)...
CakeLog <ul><li>From 1.3 </li></ul><ul><li>(Plugin | App)/libs/log/my_logger.php </li></ul><ul><li>CakeLog::config(‘my’, a...
まとめ <ul><li>ハックはまれにしか必要とされないのか </li></ul><ul><li>CakePHP が本当に必要なのか </li></ul><ul><li>できることとできないこと </li></ul><ul><li>CakePH...
Upcoming SlideShare
Loading in...5
×

Cakephpstudy5 hacks jp

2,533

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,533
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Cakephpstudy5 hacks jp"

  1. 1. コアライブラリの エレガントなハック 第 5 回 CakePHP 勉強会 @Tokyo ON 2010/5/29( 土 )
  2. 2. 資料ファイル <ul><li>http://bit.ly/cakestudy_hiromi </li></ul>
  3. 3. About me <ul><li>名前 : 清水 紘己( Shimizu Hiroki ) </li></ul><ul><li>ひろみと呼んでください! @hiromi2424 </li></ul><ul><li>CakePHP に関する行動 </li></ul><ul><ul><li>翻訳 </li></ul></ul><ul><ul><li>新機能の紹介 </li></ul></ul><ul><ul><li>TransitionComponent </li></ul></ul><ul><ul><li>パッチ / チケット </li></ul></ul><ul><li>歌うこと、ラーメンそして・・・ ビール が大好き </li></ul>
  4. 4. めにう <ul><li>導入 </li></ul><ul><li>Hacks </li></ul><ul><ul><li>コンポーネント </li></ul></ul><ul><ul><li>ヘルパ </li></ul></ul><ul><ul><li>モデル </li></ul></ul><ul><ul><li>CakeRoute </li></ul></ul><ul><ul><li>Engines </li></ul></ul>
  5. 5. 導入
  6. 6. どうしてハックするの? <ul><li>アプリケーションポリシーの埋め込み </li></ul>
  7. 7. どうしてハックするの? <ul><li>ディープデバッギング </li></ul>
  8. 8. どうしてハックするの? <ul><li>スタブ ( モックオブジェクト ) </li></ul>
  9. 9. どうしてハックするの? <ul><li>アプリケーションポリシーの埋め込み </li></ul><ul><li>ディープデバッギング </li></ul><ul><li>スタブ ( モックオブジェクト ) </li></ul>
  10. 10. どうやってハックするの? <ul><li>エイリアスみたいにマップされたオブジェクトを置換する </li></ul><ul><ul><li>このセッションではこれに焦点を当てます </li></ul></ul><ul><li>提供されてるフック </li></ul>
  11. 11. ユーザーランドインポート <ul><li>App/libs/* </li></ul><ul><li>Core から App にコピー </li></ul><ul><li>置換、終了 </li></ul>Dirty Hack
  12. 12. 不可能・エレガントでない <ul><li>Static Classes </li></ul><ul><li>Basic functions </li></ul>Use Lithium
  13. 13. Hacks
  14. 14. Hack components
  15. 15. Components - ACL <ul><li>提供されているフック </li></ul><ul><li>Configure::write('Acl.classname‘, ‘MyAcl’) </li></ul><ul><li>MyAclComponent extends AclBase </li></ul><ul><li>メソッドの実装 </li></ul><ul><ul><li>… いっぱい。 </li></ul></ul>
  16. 16. Components - Others <ul><li>マッピングされたオブジェクトの置換 </li></ul><ul><li>Component::_loaded[$key] </li></ul><ul><ul><li>オブジェクトへのリファレンス </li></ul></ul><ul><li>フックするタイミング </li></ul><ul><ul><li>Initialize() </li></ul></ul>
  17. 17. Components - Others <ul><li>Component class flow </li></ul>init() initialize() startup() プロパティ などの設定 オブジェクトのマッピング Starting Process フック
  18. 18. Components - Others <ul><li>var $components = (‘Session’, ’Auth’, ‘Security’); </li></ul>初期化中 NO Auth initialized Undefined $loaded[‘Security’] YES NO Session initialized NO NO Security initialized Undefined $loaded[‘Auth’] 存在 存在 $loaded[‘Session’] Auth::initialize() Auth::__construct()
  19. 19. Components - Others <ul><li>$Component->enabled = boolean </li></ul><ul><li>SessionComponent::__construct($base) </li></ul><ul><li>二重初期化の回避 </li></ul><ul><li>オリジナルの設定を取得 </li></ul>AliasComponent
  20. 20. Hack helpers
  21. 21. Helpers <ul><li>マッピングされたオブジェクトの置換 </li></ul><ul><li>$view::loaded[$key] </li></ul><ul><ul><li>オブジェクトへのリファレンス </li></ul></ul><ul><li>フックするタイミング </li></ul><ul><ul><li>beforeRender() </li></ul></ul><ul><li>View::_loadHelpers() </li></ul>AliasHelper
  22. 22. Hacks Models
  23. 23. Models <ul><li>ClassRegistry::init() </li></ul><ul><li>alias option </li></ul><ul><li>Example </li></ul><ul><ul><li>ClassRegistry::init(array( ‘class’ => ‘MockPost’, ‘alias’ => ‘Post’, )) </li></ul></ul><ul><li>Initialization timing </li></ul><ul><ul><li>Before Controller::constructClasses </li></ul></ul>
  24. 24. Hacks CakeRoute
  25. 25. CakeRoute <ul><li>From 1.3 </li></ul><ul><li>(Plugin | App)/libs/routes/my_route.php </li></ul><ul><li>App::import(‘Lib’, ‘routes/MyRoute’) </li></ul><ul><li>Router::connect(…, …, array(‘routeClass’ => ‘MyRoute’)) </li></ul><ul><li>class MyRoute extends CakeRoute </li></ul><ul><li>メソッドの実装 </li></ul><ul><ul><li>parse() </li></ul></ul><ul><ul><li>match() </li></ul></ul><ul><ul><li>ETC… </li></ul></ul>
  26. 26. CakeRoute <ul><li>parse() </li></ul><ul><ul><li>アクセスされたURLをパラメータに解析 </li></ul></ul><ul><ul><li>パラメータの追加・削除などの手伝い </li></ul></ul>
  27. 27. CakeRoute <ul><li>match() </li></ul><ul><ul><li>パラメータから正しいURLに変換する </li></ul></ul><ul><ul><li>リバースルーティング </li></ul></ul><ul><ul><li>URLの生成の手助け </li></ul></ul>
  28. 28. CakeRoute <ul><li>Example </li></ul><ul><ul><li>Mark Storyが素晴らしいサンプルを書いてくれました </li></ul></ul><ul><ul><li>リバースルーティングのコードを追加 </li></ul></ul>
  29. 29. Engines
  30. 30. Cache <ul><li>(Plugin | App)/libs/cache/my_cache.php </li></ul><ul><li>Cache::config(‘default’, array(‘engine’ => MyCache)) </li></ul><ul><li>class MyCache extends CacheEngine </li></ul><ul><li>メソッドの実装 </li></ul><ul><ul><li>write() </li></ul></ul><ul><ul><li>read() </li></ul></ul><ul><ul><li>delete() </li></ul></ul>
  31. 31. CakeLog <ul><li>From 1.3 </li></ul><ul><li>(Plugin | App)/libs/log/my_logger.php </li></ul><ul><li>CakeLog::config(‘my’, array(‘engine’ => MyCache)) </li></ul><ul><li>class MyLogger </li></ul><ul><li>メソッドの実装 </li></ul><ul><ul><li>write() だけ! </li></ul></ul><ul><li>Example </li></ul><ul><ul><li>if($type == ‘error’) </li></ul></ul><ul><ul><li>ファイルにログするとともに管理者へメールとか </li></ul></ul>
  32. 32. まとめ <ul><li>ハックはまれにしか必要とされないのか </li></ul><ul><li>CakePHP が本当に必要なのか </li></ul><ul><li>できることとできないこと </li></ul><ul><li>CakePHP2.0 の新機能 => エイリアス </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×