Cakephpstudy5 hacks jp

32
ココココココココ コココココココココ コ 5 コ CakePHP コココ @Tokyo ON 2010/5/29( コ )

description

 

Transcript of Cakephpstudy5 hacks jp

Page 1: Cakephpstudy5 hacks jp

コアライブラリのエレガントなハック

第 5 回 CakePHP 勉強会@Tokyo

ON 2010/5/29( 土 )

Page 2: Cakephpstudy5 hacks jp

資料ファイル http://bit.ly/cakestudy_hiromi

Page 3: Cakephpstudy5 hacks jp

About me 名前 : 清水 紘己( Shimizu Hiroki ) ひろみと呼んでください! @hiromi2424 CakePHP に関する行動

翻訳新機能の紹介TransitionComponentパッチ / チケット

歌うこと、ラーメンそして・・・ビールが大好き

Page 4: Cakephpstudy5 hacks jp

めにう 導入 Hacks

コンポーネントヘルパモデルCakeRouteEngines

Page 5: Cakephpstudy5 hacks jp

導入

Page 6: Cakephpstudy5 hacks jp

どうしてハックするの?

アプリケーションポリシーの埋め込み

Page 7: Cakephpstudy5 hacks jp

どうしてハックするの?

ディープデバッギング

Page 8: Cakephpstudy5 hacks jp

どうしてハックするの?

スタブ ( モックオブジェクト )

Page 9: Cakephpstudy5 hacks jp

どうしてハックするの?

アプリケーションポリシーの埋め込み ディープデバッギング スタブ ( モックオブジェクト )

Page 10: Cakephpstudy5 hacks jp

どうやってハックするの? エイリアスみたいにマップされたオブジェ

クトを置換するこのセッションではこれに焦点を当てます

提供されてるフック

Page 11: Cakephpstudy5 hacks jp

ユーザーランドインポート App/libs/* Core から App にコピー 置換、終了

Dirty Hack

Page 12: Cakephpstudy5 hacks jp

不可能・エレガントでない Static Classes Basic functions

Use Lithium

Page 13: Cakephpstudy5 hacks jp

Hacks

Page 14: Cakephpstudy5 hacks jp

Hack components

Page 15: Cakephpstudy5 hacks jp

Components - ACL 提供されているフック Configure::write('Acl.classname‘, ‘MyAcl’) MyAclComponent extends AclBase メソッドの実装

… いっぱい。

Page 16: Cakephpstudy5 hacks jp

Components - Others マッピングされたオブジェクトの置換 Component::_loaded[$key]

オブジェクトへのリファレンス フックするタイミング

Initialize()

Page 17: Cakephpstudy5 hacks jp

Components - Others

init() initialize() startup()

プロパティなどの設定

Component class flow

オブジェクトのマッピ

ング

StartingProcess

フック

Page 18: Cakephpstudy5 hacks jp

Components - Others

Auth::__construct() Auth::initialize()

$loaded[‘Session’] 存在

存在$loaded[‘Auth’] Undefined

$loaded[‘Security’] Undefined

Session initialized NO YES

Auth initialized NO 初期化中

Security initialized NO NO

var $components = (‘Session’, ’Auth’, ‘Security’);

Page 19: Cakephpstudy5 hacks jp

Components - Others $Component->enabled = boolean SessionComponent::__construct($base) 二重初期化の回避 オリジナルの設定を取得

AliasComponent

Page 20: Cakephpstudy5 hacks jp

Hack helpers

Page 21: Cakephpstudy5 hacks jp

Helpers マッピングされたオブジェクトの置換 $view::loaded[$key]

オブジェクトへのリファレンス フックするタイミング

beforeRender() View::_loadHelpers()

AliasHelper

Page 22: Cakephpstudy5 hacks jp

Hacks Models

Page 23: Cakephpstudy5 hacks jp

Models ClassRegistry::init() alias option Example

ClassRegistry::init(array(‘class’ => ‘MockPost’,‘alias’ => ‘Post’,

)) Initialization timing

Before Controller::constructClasses

Page 24: Cakephpstudy5 hacks jp

Hacks CakeRoute

Page 25: Cakephpstudy5 hacks jp

CakeRoute From 1.3 (Plugin | App)/libs/routes/my_route.php App::import(‘Lib’, ‘routes/MyRoute’) Router::connect(…, …, array(‘routeClass’ => ‘MyRoute’))

class MyRoute extends CakeRoute メソッドの実装

parse()match()ETC…

Page 26: Cakephpstudy5 hacks jp

CakeRoute parse()

アクセスされた URL をパラメータに解析パラメータの追加・削除などの手伝い

Page 27: Cakephpstudy5 hacks jp

CakeRoute match()

パラメータから正しい URL に変換するリバースルーティングURL の生成の手助け

Page 28: Cakephpstudy5 hacks jp

CakeRoute Example

Mark Story が素晴らしいサンプルを書いてくれました

リバースルーティングのコードを追加

Page 29: Cakephpstudy5 hacks jp

Engines

Page 30: Cakephpstudy5 hacks jp

Cache (Plugin | App)/libs/cache/my_cache.php Cache::config(‘default’, array(‘engine’ => MyCache))

class MyCache extends CacheEngine メソッドの実装

write()read()delete()

Page 31: Cakephpstudy5 hacks jp

CakeLog From 1.3 (Plugin | App)/libs/log/my_logger.php CakeLog::config(‘my’, array(‘engine’ => MyCache))

class MyLogger メソッドの実装

write() だけ! Example

if($type == ‘error’)ファイルにログするとともに管理者へメール

とか

Page 32: Cakephpstudy5 hacks jp

まとめ ハックはまれにしか必要とされないのか CakePHP が本当に必要なのか できることとできないこと CakePHP2.0 の新機能 => エイリアス