cakephperの日記(CakePHP, Laravel, PHP)


継続的WebセキュリティテストサービスVAddyを始めました!

2013-01-24

App::import('Model', 'モデル名')をCakePHP2用にApp::uses()使うように置換

テストケースなどでモデルの読み込みをApp::importでやっている箇所が大量にあったので、一括置換する方法

App::importの箇所を、自分のモデル名の文字列を切り出して、App::usesに置換します。

find ./ -name "*.php" | xargs sed -i "s/App::import('Model', \(.*\))/App::uses(\1, 'Model')/g"

2013-01-08

Cake1からCake2に移行した際に、Call to a member function body() on a non-objectエラーが出る場合の対応

Cake1.2からCake2に乗せ換えしていてはまった話。

エラーログに下記のようなメッセージが出てうまく表示できない場合、コントローラのresponseオブジェクトが存在しないのが原因。$this->response->body()をCakeのコアコードで呼び出すのでその時にresuponseオブジェクトが無いからメソッド呼び出しエラーとなる。

Fatal Error (1): Call to a member function body() on a non-object

理由は、Controllerのコンストラクタを下記のように記述しているからでした。。。。

function __construct() {
	parent::__construct();
}

Cake2からはコンストラクタにrequest,responseオブジェクトが渡されるのでそれを考慮しないといけない

function __construct($request, $response) {
	parent::__construct($request, $response);
}

いやー、はまったわー。保守もしたことがないコードの載せ換え作業は大変ですねー