CakePHP1.3から2.0への変更時の注意点 その1


新しいプロジェクトがあったので、どうせやるならと、
CakePHP2.0を使ってみようと思ったのですが、意外に1.3と互換性がなく大変だったので、
簡単につまづいた点を整理してみたいと思います。

ファイル名の変更

今までは、tests_controller.php と記述していたファイル名が、TestsController.phpと記述するようになりました。
すべてのファイル名を変更する必要があります。

 

Componentの継承元変更

今まで、Componentの継承元は、Object でしたが、Component に変更となりました。

<?php
class TestComponent extends Component {
}

従来どおりに、Object と記述すると、下記のエラーが発生します。

<a><strong>Warning</strong> (2)</a>: call_user_func_array() expects parameter 1 to be a valid callback, class 'TestComponent' does not have a method 'initialize'
<a><strong>Warning</strong> (2)</a>: call_user_func_array() expects parameter 1 to be a valid callback, class 'TestComponent' does not have a method 'beforeRender'

AppController.php の保存先

今まで、アプリケーション直下に置かれていた、AppController.php ファイルですが、
Controller 以下に変更となりました。

 

ビューでのヘルパーの呼び出し

<?php
echo $html->link('テスト', 'test');

今まで、上記にてヘルパーの呼び出しができていたのですが、 できなくなります。

<?php
echo $this->Html->link('テスト', 'test');

正式には、1.3から変更するとこを推奨されていたのですが、2.0にて完全に移行せよとなりました。

 

Controller内での、$this->data へのアクセス

<?php
class TestController extends AppController {
function index() {
$this->data['Test']['name'] = "testName";
}
}

これを実行すると、下記のNoticeが発生し$this->dataにはデータは渡りません。

<a><strong>Notice</strong> (8)</a>: Indirect modification of overloaded property TestController::$data has no effect

下記のように変更する必要があります。

$this->request->data['Test']['name'] = "testName";

いろいろと、$this->request で取得できるようになっているので、
http://book.cakephp.org/2.0/en/controllers/request-response.html
こちらもご確認ください。

簡単に移行できるかなと思ったら、少しハードルがありますので、ご注意ください。

気づいた点は、また記述いたします。

Leave a Reply