• Save
CakePHP 1 to 2 Migration tips 100
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

CakePHP 1 to 2 Migration tips 100

on

  • 4,554 views

Migration tips of CakePHP 1.2 to 2.3

Migration tips of CakePHP 1.2 to 2.3

Statistics

Views

Total Views
4,554
Views on SlideShare
2,746
Embed Views
1,808

Actions

Likes
10
Downloads
0
Comments
0

9 Embeds 1,808

http://d.hatena.ne.jp 1642
http://labs.asunochikara.com 114
https://twitter.com 26
http://hatenatunnel.appspot.com 15
http://www.hatenatunnel.appspot.com 4
http://webcache.googleusercontent.com 3
http://www.slashdocs.com 2
https://twimg0-a.akamaihd.net 1
http://dev-wmp2-pg04.njc-web.info 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

CakePHP 1 to 2 Migration tips 100 Presentation Transcript

  • 1. CakePHP 1->2Migration Tips 100 2013/2/14 Cake Beer Talk
  • 2. Yasushi Ichikawa@cakephper / @ichikawayhttp://d.hatena.ne.jp/cakephperFrom 福岡Fukuoka.php 主催
  • 3. 発売中!! CakePHP2 実践入門  @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 4. Upgrade Shell
  • 5. Upgrade Shell●Cake1.3 のコードを自動変換● 全自動ではありません @ichikaway http://cake.eizoku.com/blog/
  • 6. Upgrade Shell$ cd 13/cake/app$ lib/Cake/Console/cake upgrade @ichikaway http://cake.eizoku.com/blog/
  • 7. Upgrade Shelldry-run オプションcake upgrade all --dry-run実行ログのみ表示コードは書き換えない @ichikaway http://cake.eizoku.com/blog/
  • 8. Upgrade Shellバージョン管理git など @ichikaway http://cake.eizoku.com/blog/
  • 9. Upgrade Shell●all ●全てのオプションを実行●tests ●テスト名の変更など●locations ●ファイル / フォルダ名変更 @ichikaway http://cake.eizoku.com/blog/
  • 10. Upgrade Shell●i18n ●__() 関係の変更 ●true 廃止、 echo 追加●helpers ●ヘルパー呼出し $this 経由●basics ●廃止 Global 関数置換 @ichikaway http://cake.eizoku.com/blog/
  • 11. Upgrade Shell●request ● $this->request->xxx() ● data,params,here,action●configure ● Configure::read() 置換●constants ●定数の変更 @ichikaway http://cake.eizoku.com/blog/
  • 12. Upgrade Shell●components ●Component クラスを継承するように●exceptions ●cakeError を例外に置換 ●error400, error404, error500 @ichikaway http://cake.eizoku.com/blog/
  • 13. 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/
  • 14. CakePHP1.2 → 2.3 移行中
  • 15. ● 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
  • 16. ● 極力 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
  • 17. ● 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
  • 18. ● upgrade shell ● [ 注意 ] コンポーネント内の $this->data まで置換される● $this->controller のような持ち方をしているものを 置換する必要あり● 例: $this->controller->data $this->controller->request->data @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 19. ● e() や a() が廃止● upgrade shell は最長マッチで置換 ● 1 行に e() が複数個ある場合は注意 ● 例 : e(foo); e(bar); @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 20. ● 移行作業は常に Syntax check しながら進む● find . -type f -name "*.php" -exec php -l {} ; @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 21. ● 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
  • 22. ● upgarde shell のファイルリネームは、中のクラス 定義を見てファイル名にする 1 ファイルに複数クラスある場合は要注意 ● ● 最初のクラス定義のクラス名をファイル名にしてしまう //FooControllerTest.php なのに TestFooController.php に置換される <?php class TestFooController extends FooController {  } class FooControllerTest extends CakeTestCase{ }@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 23. ● 古い 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
  • 24. ● 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
  • 25. Behavior の beforeFind メソッドで戻り値を必ず返すことhttp://php-tips.com/php/cakephp-php/2012/02 @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 26. Set クラスは Hash クラスに(しなくても動くけど)Set::extract(/Model/id, $dataArray);  ↓ Hash::extract($dataArray, {n}.Model.id);@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 27. ● 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
  • 28. ● view の renderElement を element に置換find ./ -name "*.ctp" | xargs sed -i s/renderElement(/element(/g @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 29. ● Controller の __construct() に手を入れている場合function __construct($request, $response){ parent::__construct($request, $response);} @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 30. テストの移行
  • 31. ● 廃止メソッド ● start(), startTest(), end(), endTest()● 置き換え ● setUp(), tearDown() @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 32. ● 移行 Tips ではないが。。。。 ● テストモデルの生成時に alias セット ● ClassRegistry::init(array( class => TestHogeModel, alias => HogeModel) ); @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 33. ● dbConfig が勝手に test になってしまう問題 ● Model::useDbConfig には test_xxx という規約 ● wordpress のような文字列を指定していると test という dbConfig に強制的に変更されてしまう – test_wordpress で対応 @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 34. ● 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
  • 35. $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
  • 36. ● Component 単体テスト ● Component オブジェクト生成 $this->Foo = new BarComponent(new ComponentCollection()); @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 37. ● コントローラのオブジェクト生成、コンポーネント利用$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
  • 38. ● 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
  • 39. CakePHP 1->2Migration Tips 31/100 ありがとうございました!