Contenu connexe
Similaire à CakePHP 1 to 2 Migration tips 100 (20)
CakePHP 1 to 2 Migration tips 100
- 5. 発売中!!
CakePHP2 実践入門
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 8. Upgrade Shell
$ cd 13/cake/app
$ lib/Cake/Console/cake upgrade
@ichikaway http://cake.eizoku.com/blog/
- 12. Upgrade Shell
●i18n
●__() 関係の変更
●true 廃止、 echo 追加
●helpers
●ヘルパー呼出し $this 経由
●basics
●廃止 Global 関数置換
@ichikaway http://cake.eizoku.com/blog/
- 13. Upgrade Shell
●request
● $this->request->xxx()
● data,params,here,action
●configure
● Configure::read() 置換
●constants
●定数の変更
@ichikaway http://cake.eizoku.com/blog/
- 15. Upgrade Shell
●cake upgrade all の後に ...
● webroot 入替え
● database.php 書き換え
●//'driver' => 'mysql',
● 'datasource' => 'Database/Mysql',
● core.php 入替え (APC off ?)
● routes.php 入替え
● tmp キャッシュ消去
@ichikaway http://cake.eizoku.com/blog/
- 17. ● 1.2 のバリデーション廃止
● VALID_NOT_EMPTY, VALID_NUMBER
cd Model
sed -i -e "s/VALID_NOT_EMPTY/'notEmpty'/g" *.php
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 18. ● 極力 App::uses() を使う ( パフォーマンス向上 )
● App::import() は最低限にとどめる
例 : Vendor の読込みの置換
sed -i -e
"s#App::import('Vendor', (.*))#App::uses(1, 'Vendor')#g"
*.php
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 19. ● Controller で AppController を App::uses()
● Model で AppModel を App::uses()
例 : AppModel の読込み ( 階層構造対応)
find ./ -name "*.php" |
xargs sed -i
"s/class (.*) extends AppModel/
App::uses('AppModel', 'Model');nclass 1 extends AppModel/g"
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 20. ● upgrade shell
● [ 注意 ] コンポーネント内の $this->data まで置換される
● $this->controller のような持ち方をしているものを
置換する必要あり
● 例: $this->controller->data
$this->controller->request->data
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 21. ● e() や a() が廃止
● upgrade shell は最長マッチで置換
● 1 行に e() が複数個ある場合は注意
● 例 : e('foo'); e('bar');
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 22. ● 移行作業は常に Syntax check しながら進む
● find . -type f -name "*.php" -exec php -l {} ;
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 23. ● upgrade shell はコントローラなどがディレクトリ階
層化されていると、それをフラットにするため注意
● controller/foo/bar.php → Controller/Bar.php
● 自力でリネーム
● 階層化は Cake2 から自動探索しない
● App::build() で定義 (Config/bootstrap.php)
AutoAppBuildPlugin
●
– https://github.com/ichikaway/AutoAppBuild
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 24. ● upgarde shell のファイルリネームは、中のクラス
定義を見てファイル名にする
1 ファイルに複数クラスある場合は要注意
●
● 最初のクラス定義のクラス名をファイル名にしてしまう
//FooControllerTest.php なのに TestFooController.php に置換される
<?php
class TestFooController extends FooController {
}
class FooControllerTest extends CakeTestCase{
}
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 25. ● 古い find() の定義
● findAll, findCount, findList 廃止
● find($conditions,xxx,xxx) 廃止
● 探す
● grep find -R ./* | egrep -v "find('first'|find('all'|find('list'|
find('count'|findById"
● 置き換える
● find('all', $params); //all は全て小文字!
●find($conditions,xxx,xxx)
● デフォルトが first 指定されている
● find('first',$params) に変える
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 26. ● JavascriptHelper 廃止 (JsHelper にする)
● helpers = array('Js');
View での呼び出し方法 (foo.js)
$this->Html->script('foo', array('inline'=>false));
Javascript コードのべた書き方法も変更
旧 : $this->addScript($javascript->codeBlock())
新 : $this->addScript($this->Html->scriptBlock())
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 27. Behavior の beforeFind メソッド
で戻り値を必ず返すこと
http://php-tips.com/php/cakephp-php/2012/02
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 28. Set クラスは Hash クラスに
(しなくても動くけど)
Set::extract('/Model/id', $dataArray);
↓
Hash::extract($dataArray, '{n}.Model.id');
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 29. ● Form::select() の API 変更
旧
$this->Form->select(
"month", $month, $month, array(), '–'
);
新
$this->Form->select(
"month", $month, array('value' => $month, 'empty' => '–')
);
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 30. ● view の renderElement を element に置換
find ./ -name "*.ctp" |
xargs sed -i 's/renderElement(/element(/g'
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 31. ● Controller の __construct() に手を入れている場合
function __construct($request, $response){
parent::__construct($request, $response);
}
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 33. ●
廃止メソッド
● start(), startTest(), end(), endTest()
●
置き換え
● setUp(), tearDown()
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 34. ● 移行 Tips ではないが。。。。
● テストモデルの生成時に alias セット
● ClassRegistry::init(array(
'class' => 'TestHogeModel',
'alias' => 'HogeModel')
);
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 35. ● dbConfig が勝手に test になってしまう問題
● Model::useDbConfig には test_xxx という規約
● wordpress のような文字列を指定していると test という
dbConfig に強制的に変更されてしまう
– test_wordpress で対応
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 36. ● phpunit と web の test.php が tmp の cache を共
有して権限の取り合いになってしまう問題
● tmp フォルダをそれぞれ分ける
– tmp/consoletest, tmp/webtest
● app/Console/cake.php に TMP 定数を追加
– ShellDispatcher::run() の前に
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 37. $app_dir = dirname(dirname(__FILE__));
define('TMP', $app_dir . '/tmp/console/');
unset($app_dir);
if(!is_dir(TMP)) { mkdir(TMP, 0777); }
if(!is_dir(TMP . '/cache')) { mkdir(TMP . '/cache', 0777); }
if(!is_dir(TMP . '/cache/persistent')) {
mkdir(TMP . '/cache/persistent', 0777); }
if(!is_dir(TMP . '/cache/models')) {
mkdir(TMP . '/cache/models', 0777); }
if(!is_dir(TMP . '/cache/views')) {
mkdir(TMP . '/cache/views', 0777); }
if(!is_dir(TMP . '/logs')) { mkdir(TMP . '/logs', 0777); }
if(!is_dir(TMP . '/tests')) { mkdir(TMP . '/tests', 0777); }
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 38. ● Component 単体テスト
● Component オブジェクト生成
$this->Foo = new BarComponent(new ComponentCollection());
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 39. ●
コントローラのオブジェクト生成、コンポーネント利用
$this->Con
= new TestFooController(new CakeRequest(), new CakeResponse());
$this->Con->constructClasses();
$this->Con->Components->init($this->Con);
$this->Con->MyHogeComponent->startup($this->Con);
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
- 40. ● CakeTestCase::testAction() 廃止
● ControllerTestCase を継承すること
継承できない場合
App::uses('ControllerTestCase', 'TestSuite');
class MyControllerTestCase extends ControllerTestCase {
}
$this->ControllerTestCase = new MyControllerTestCase();
$this->ControllerTestCase->testAction('/foo/bar');
@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper