Cakephpstudy5 hacks jp

Post on 07-Nov-2014

3.357 views 3 download

Tags:

description

 

Transcript of Cakephpstudy5 hacks jp

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

第 5 回 CakePHP 勉強会@Tokyo

ON 2010/5/29( 土 )

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

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

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

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

めにう 導入 Hacks

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

導入

どうしてハックするの?

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

どうしてハックするの?

ディープデバッギング

どうしてハックするの?

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

どうしてハックするの?

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

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

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

提供されてるフック

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

Dirty Hack

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

Use Lithium

Hacks

Hack components

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

… いっぱい。

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

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

Initialize()

Components - Others

init() initialize() startup()

プロパティなどの設定

Component class flow

オブジェクトのマッピ

ング

StartingProcess

フック

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’);

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

AliasComponent

Hack helpers

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

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

beforeRender() View::_loadHelpers()

AliasHelper

Hacks Models

Models ClassRegistry::init() alias option Example

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

)) Initialization timing

Before Controller::constructClasses

Hacks CakeRoute

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…

CakeRoute parse()

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

CakeRoute match()

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

CakeRoute Example

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

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

Engines

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

class MyCache extends CacheEngine メソッドの実装

write()read()delete()

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

class MyLogger メソッドの実装

write() だけ! Example

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

とか

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