CakePHP1.3と2.xの違いを適当にまとめてみる。
表題の通り、CakePHP1.3と2.xの違いを、とりあえず、アンチョコとしてまとめてみます。
主に、2.0 移行ガイドよりのコピペ+メモです。
2.0 移行ガイド - CakePHP Cookbook v2.x documentation
PHPバージョン
PHP5.2.8以上をサポート
PHP4系統はCakee2.x系統では完全サポート外となる。1.3以下でやってくれというスタンス。
ファイル・フォルダ名
ファイル名
キャメルケース(CamelCase)に変更。アンダースコア(アンダーバー)で繋ぐことは基本的になくなる。
my_things_controller.php は MyThingsController.php になる。
form.php (ヘルパー) は FormHelper.php になる。
session.php (コンポーネント) は SessionComponent.php になる。
ただし、ビューファイルは従来通り、小文字とアンダースコアで構成される。
フォルダ名
ほとんどのフォルダ、特にクラスを含むフォルダはキャメルケース(CamelCase)にする必要あり。
キャメルケースのフォルダ
Config
Console
Controller
Controller/Component
Lib
Locale
Model
Model/Behavior
Plugin
Test
Vendor
View
View/Helper
小文字のフォルダ
webroot
tmp
AppController / AppModel / AppHelper / AppShell
app/app_controller.php、
app/app_model.php 、
app/app_helper.php
はそれぞれ、
app/Controller/AppController.php、
app/Model/AppModel.php 、
app/View/Helper/AppHelper.php
に配置・名称変更されました。
また、全てのシェル・タスクはAppShellを継承するようになりました。
独自のAppShell.phpを app/Console/Command/AppShell.php にもつことができます。
Basics.php
削除されたエイリアスが妙にあるので注意。aa()が無くなったので修正が大変だw
- getMicrotime() は削除されました。 代わりにネイティブの microtime(true) を使用してください。
- e() は削除されました。 echo を使用してください。
- r() は削除されました。 str_replace を使用してください。
- a() は削除されました。 array() を使用してください。
- aa() は削除されました。 array() を使用してください。
- up() は削除されました。 strtoupper() を使用してください。
- low() は削除されました。 strtolower() を使用してください。
- params() は削除されました。 これはCakePHP内で使われることはありませんでした。
- ife() は削除されました。 三項演算子を使ってください。
- uses() は削除されました。 App::import() を使ってください。
- PHP4互換のための関数は削除されました。
- PHP5定数は削除されました。
- グローバル変数 $TIME_START は削除されました。 代わりに TIME_START 定数か $_SERVER['REQUEST_TIME'] を使用してください。
パラメータ受け取り方法
ver 1.x系では
1 |
$this->data['Topic']['data'] |
としていたのが
ver 2.x系では、
1 |
$this->request->data['Topic']['data'] |
となる。
まとめると、
CakePHP1.3系 : CakePHP2.0系
$this->data : $this->request->data
$this->params['url']['url'] : $this->request->url
$this->params['contoller'] : $this->request->controller
$this->params['action'] or $this->action : $this->request->action
$this->params['pass'] or $this->passedArgs : $this->request->pass
$this->params['named'] or $this->passedArgs : $this->request->named
のようになる。
コンポーネント
コンポーネントは Object を継承するのではなく Component クラスを継承する。
自作のコンポーネントなど、1.x系では Object クラスを継承しているが2.xでは Component クラスを継承して使う。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class StringComponent extends Component { /** * 半角カタカナを全角カタカナに変換 * * @param $str * @return void */ public function to_zen_katakana( $str=null ) { // 配列の時 if(is_array($str)) return array_map(array($this, 'to_zen_katakana'), $str); // 変換実行 $str = mb_convert_kana($str, "KV", Configure::read('App.encoding')); return $str; } } |
ヘルパー
ビュー内のヘルパーの記述変更
ビュー内のヘルパーの記述変更
今まで使っていたHelperの使い方が変わる。
EX.1
ver1.x(従来)
1 |
$session->check('session_name'); |
ver2.x(新バージョン)
1 |
$this->Session->check('session_name'); |
EX.2
ver1.x(従来)
1 |
$html->css('style'); |
ver2.x(新バージョン)
1 |
$this->Html->css('style'); |
EX.3
ver1.x(従来)
1 |
$form->input('Topic.subject'); |
ver2.x(新バージョン)
1 |
$this->Form->input('Topic.subject'); |
ヘルパーの非推奨になったプロパティ
以下のヘルパのプロパティは非推奨となります。
将来のリリースで削除される予定のこれらのプロパティに直接アクセスする代わりに、Requestオブジェクトのプロパティまたはヘルパーのメソッドを使ってください。
- Helper::$webroot は非推奨になりました。代わりにRequestオブジェクトのwebrootプロパティを使用してください。
- Helper::$base は非推奨になりました。代わりにRequestオブジェクトのbaseプロパティを使用してください。
- Helper::$here は非推奨になりました。代わりにRequestオブジェクトのhereプロパティを使用してください。
- Helper::$data は非推奨になりました。代わりにRequestオブジェクトのdataプロパティを使用してください。
- Helper::$params は非推奨になりました。代わりに $this->request を使用してください。
XmlHelper、AjaxHelper、JavascriptHelperの削除
AjaxHelperとJavascriptHelperは1.3バージョンから非推奨となったため削除されました。
XmlHelperは、Xml の改善により、時代遅れで冗長になったことから削除されました。以前のXmlHelperの使用方法を書きなおすためには Xml クラスを使う必要があります。
AjaxHelperとJavascriptHelperは、JsHelperとHtmlHelperに置き換えられました。
JsHelper
JsBaseEngineHelper は抽象クラスとなりました。 以前はエラーを吐いていたメソッド全てを実装する必要があるでしょう。
PaginatorHelper
PaginatorHelper::sort() はtitleとkey引数の順序を逆に取るようになりました。 $keyは常に最初の引数になります。 これは2番目のものを追加するときに引数を交換(swap)する必要を無くすためです。
PaginatorHelperは内部で使われるページングのパラメーターに数多くの変更があります。 defaultキーは削除されました。
PaginatorHelperはクエリ文字列のページングパラメーターを用いてのリンクの生成をサポートするようになりました。
FormHelper
$selectedパラメータの削除
$selected パラメータは FormHelper のいくつかのメソッドから削除されました。
全てのメソッドは $attributes['value'] キーをサポートするようになり、 $selected の代わりに使われるでしょう。
この変更は FormHelper のメソッドを簡略化し、数多くの引数を減らし、 $selected が作り出す重複を無くすものです。
影響のあるメソッドは以下のとおりです:
- FormHelper::select()
- FormHelper::dateTime()
- FormHelper::year()
- FormHelper::month()
- FormHelper::day()
- FormHelper::hour()
- FormHelper::minute()
- FormHelper::meridian()
$selectedの代わりに、$attributes の連想配列で指定する方法
1 |
echo $this->Form->select( 'test_field', array('a' => '選択肢A', 'b' => '選択肢B'), array('value' => 'b')); |
これでデフォルトで「選択肢B」という項目が選択される
文法
ver1.3(従来)
1 |
select( $fieldName, $options = array ( ), $selected = NULL, $attributes = array ( ) ) |
ver2.x(新バージョン)
1 |
select($fieldName, $options = array(), $attributes = array()) |
[tgAmazonItemLookup asin="4774153249" related="1"]