CakePHP & PHP 2009/05/28 12:07
CakePHP フレームワークのソースをapp/で置き換える
こないだのCakePHP勉強会でやったネタですが、需要がありそうなんで書きます。
CakePHPは1.2Finalになって色々と改良が成されて拡張性も増えたのですが、良くなってきた分、さらに色々とやりたくなるのが人の常です。そこでフレームワークのソースをどうしても書き換えたい時にcake/を触るのではなく、せめてapp/でフレームワークソースを置き換えましょう、という話です。
[目標] ConnectionManagerをapp/に置く
デモではDispatcherの置き換えをやったのですが、cake bake diaryさんのエントリのように需要があるかもなので、ConnectionManagerをapp/に置いてフレームワークに読ませようと思います。
1. ConnectionManagerのソースをapp/以下にコピー
ConnectionManagerを一から書いても良いのですが、それも大変なので、まずフレームワークのConnectionManagerのソースをapp/以下にコピーします。
ConnectionManagerはcake/libs/model/connection_manager.phpになるので、それに倣ってapp/modles/connection_manager.phpにコピーします。
$ cp -a cake/libs/model/connection_manager.php app/models/
2. ConnectionManagerのソースを変更する
app/にコピーしたConnectionManagerを変更します。ここでは読み込まれたソースが分かりやすいように先頭にファイルパスをvar_dump()しておきます。
[app/models/connection_manager.php]
-
<?php
-
/* SVN FILE: $Id: connection_manager.php 8120 2009-03-19 20:25:10Z gwoo $ */
-
/**
-
* Datasource connection manager
-
*
-
* Provides an interface for loading and enumerating connections defined in app/config/database.php
-
*
-
* PHP versions 4 and 5
3. ConnectionManagerをフレームワークに読ませる
最後にapp/のConnectionManagerをフレームワークに読み込ませます。これにはApp::import()のキャッシュ機能を使います。
方法は簡単で、bootstrap.phpに以下のように書くだけでokです。
[app/config/bootstrap.php]
ブラウザからアクセスすると下のように画面上に2.で書いたパスが表示されて、[app/models/connection_manager.php]が読み込まれているのが分かります。
あとはこのソースをガシガシ書き換えていけばokです。
いざという時使えるかも
少しトリッキーな方法ですが、フレームワークのソースを書き換える手段としては覚えておいて損は無いと思います。
ただし、この方法はApp::import()の機能を利用しているので、フレームワークがApp::import()で読まないソース(Objectとか)は残念ながら使えません。あしからず。
■Related Posts
- CakePHP解説本を書きました
- CakePHP1.1.12.4205&1.2.0.4206_devリリース
- CakePHP Screencastまとめ
- CakeMatsuriにまつわる7つの疑問
- CakePHPのコーディング規約





on 28 5月 2009 at 14:21 1.ラボブログ said …
CakePHP + Ktai Library 非公式 Wik...
スパイスラボ神部です。 先日、第4回CakePHP勉強会@Tokyo に参加してきました。 特に聞きたかった K-tai Library のセッションも聞くこと... (more...)