SlideShare a Scribd company logo
CakePHP 1->2
Migration Tips
     100


      2013/2/14
    Cake Beer Talk
Yasushi Ichikawa
@cakephper / @ichikaway
http://d.hatena.ne.jp/cakephper




From 福岡
Fukuoka.php 主催
CakePHP 1 to 2 Migration tips 100
CakePHP 1 to 2 Migration tips 100
発売中!!
           CakePHP2 実践入門



  




@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
Upgrade Shell
Upgrade Shell
●Cake1.3 のコードを自動変換
●
 全自動ではありません




    @ichikaway   http://cake.eizoku.com/blog/
Upgrade Shell


$ cd 13/cake/app
$ lib/Cake/Console/cake upgrade




    @ichikaway   http://cake.eizoku.com/blog/
Upgrade Shell


dry-run オプション
cake upgrade all --dry-run

実行ログのみ表示
コードは書き換えない

    @ichikaway   http://cake.eizoku.com/blog/
Upgrade Shell


バージョン管理
git など




  @ichikaway   http://cake.eizoku.com/blog/
Upgrade Shell
●all
 ●全てのオプションを実行

●tests

 ●テスト名の変更など

●locations

 ●ファイル / フォルダ名変更




    @ichikaway   http://cake.eizoku.com/blog/
Upgrade Shell
●i18n
 ●__() 関係の変更

 ●true 廃止、 echo 追加

●helpers

 ●ヘルパー呼出し $this 経由

●basics

 ●廃止 Global 関数置換


    @ichikaway   http://cake.eizoku.com/blog/
Upgrade Shell
●request
 ● $this->request->xxx()

 ● data,params,here,action

●configure

 ● Configure::read() 置換

●constants

 ●定数の変更



     @ichikaway   http://cake.eizoku.com/blog/
Upgrade Shell
●components
 ●Component クラスを継承するように

●exceptions

 ●cakeError を例外に置換

 ●error400, error404, error500




    @ichikaway   http://cake.eizoku.com/blog/
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/
CakePHP
1.2 → 2.3
 移行中
●   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
●   極力 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
●   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
●   upgrade shell
    ●   [ 注意 ] コンポーネント内の $this->data まで置換される
●   $this->controller のような持ち方をしているものを
    置換する必要あり
●   例: $this->controller->data
         $this->controller->request->data
 



@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
●   e() や a() が廃止
●   upgrade shell は最長マッチで置換
    ●   1 行に e() が複数個ある場合は注意
    ●   例 : e('foo'); e('bar');



 



@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
●   移行作業は常に Syntax check しながら進む
●   find . -type f -name "*.php" -exec php -l {} ;




 



@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
●   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
●   upgarde shell のファイルリネームは、中のクラス
    定義を見てファイル名にする
        1 ファイルに複数クラスある場合は要注意
        ●


      ● 最初のクラス定義のクラス名をファイル名にしてしまう
    //FooControllerTest.php なのに TestFooController.php に置換される

    <?php

    class TestFooController extends FooController {
    }

    class FooControllerTest extends CakeTestCase{

    }


@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
●   古い 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
●   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
Behavior の beforeFind メソッド
で戻り値を必ず返すこと

http://php-tips.com/php/cakephp-php/2012/02
 



@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
Set クラスは Hash クラスに
(しなくても動くけど)

Set::extract('/Model/id', $dataArray);
  ↓
 
Hash::extract($dataArray, '{n}.Model.id');



@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
●   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
●   view の renderElement を element に置換



find ./ -name "*.ctp" |
 xargs sed -i 's/renderElement(/element(/g'



 



@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
●   Controller の __construct() に手を入れている場合

function __construct($request, $response){

    parent::__construct($request, $response);

}

 



@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
テストの移行
●
    廃止メソッド
    ●   start(), startTest(), end(), endTest()
●
    置き換え
    ●   setUp(), tearDown()




 



@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
●   移行 Tips ではないが。。。。
    ●   テストモデルの生成時に alias セット
    ●   ClassRegistry::init(array(
              'class' => 'TestHogeModel',
              'alias' => 'HogeModel')
        );



 



@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
●   dbConfig が勝手に test になってしまう問題
    ●   Model::useDbConfig には test_xxx という規約
    ●   wordpress のような文字列を指定していると test という
        dbConfig に強制的に変更されてしまう
        –   test_wordpress で対応




 



@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
●   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
$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
●   Component 単体テスト
     ●   Component オブジェクト生成



    $this->Foo = new BarComponent(new ComponentCollection());




 



@cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
●
    コントローラのオブジェクト生成、コンポーネント利用

$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
●   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
CakePHP 1->2
Migration Tips
   31/100


  ありがとうございました!

More Related Content

PDF
20120307 CakePHP Study in Tokyo
KEY
FuelPHPをさわってみて
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
PDF
omoon.org の裏側 〜FuelPHP の task 活用例〜
PDF
Fuel php osc tokyo2012
PDF
10分でわかるFuelPHP @ 2011/12
PDF
FuelPHPで3種のprofilerを使ってみた
PDF
NetBeansではじめる FuelPHP
20120307 CakePHP Study in Tokyo
FuelPHPをさわってみて
15分でCakePHPを始める方法(Nseg 2013-11-09 )
omoon.org の裏側 〜FuelPHP の task 活用例〜
Fuel php osc tokyo2012
10分でわかるFuelPHP @ 2011/12
FuelPHPで3種のprofilerを使ってみた
NetBeansではじめる FuelPHP

What's hot (20)

PDF
FuelPHP Osu Nagoya vol.1
PDF
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
PDF
はじめての FuelPHP
PDF
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
PDF
20091030cakephphandson 01
PDF
Ruby on Rails Tutorial
PDF
実"戦"CakePHP Plugin
PPTX
今、最も勢いのあるWebフレームワーク「fuel php」
PDF
MoteMote Compiler Plugin
PDF
PHP の GC の話
PDF
最近の PHP の話
KEY
最近、僕がハマったFuelPHPの紹介
PDF
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
PPTX
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
KEY
EC-CUBE + PHPUnit で 実践テスト駆動開発
PPTX
Ansibleで始めるinfraTDD(初級編)
PDF
PHP勉強会 #51
PDF
CodeIgniter入門
PPTX
Fuelphp1.8を始めたい
PDF
Windows で拡張モジュールをビルドしてみた
FuelPHP Osu Nagoya vol.1
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
はじめての FuelPHP
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
20091030cakephphandson 01
Ruby on Rails Tutorial
実"戦"CakePHP Plugin
今、最も勢いのあるWebフレームワーク「fuel php」
MoteMote Compiler Plugin
PHP の GC の話
最近の PHP の話
最近、僕がハマったFuelPHPの紹介
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
EC-CUBE + PHPUnit で 実践テスト駆動開発
Ansibleで始めるinfraTDD(初級編)
PHP勉強会 #51
CodeIgniter入門
Fuelphp1.8を始めたい
Windows で拡張モジュールをビルドしてみた
Ad

Viewers also liked (14)

PDF
An Introduction to CakePHP
KEY
My Development Story
DOC
How to migrate Cakephp 1.x to 2.x
PPTX
cakephp UDUYKTHA (1)
PDF
CakePHP 2, Yii OR Zend
PPTX
Cake PHP 3 Presentaion
PDF
Evented applications with RabbitMQ and CakePHP
PDF
CakePHP mistakes made
PDF
デザイナー、フロントエンジニア向けgithub勉強会資料 概要編
PDF
New in cakephp3
PPT
Recursive in CakePHP
PPT
Top 50 Interview Questions and Answers in CakePHP
PDF
Ch ch-changes cake php2
ODP
Don't Code, Bake. An introduction to CakePHP ~PHP Hampshire Oct 2014
An Introduction to CakePHP
My Development Story
How to migrate Cakephp 1.x to 2.x
cakephp UDUYKTHA (1)
CakePHP 2, Yii OR Zend
Cake PHP 3 Presentaion
Evented applications with RabbitMQ and CakePHP
CakePHP mistakes made
デザイナー、フロントエンジニア向けgithub勉強会資料 概要編
New in cakephp3
Recursive in CakePHP
Top 50 Interview Questions and Answers in CakePHP
Ch ch-changes cake php2
Don't Code, Bake. An introduction to CakePHP ~PHP Hampshire Oct 2014
Ad

Similar to CakePHP 1 to 2 Migration tips 100 (20)

PDF
CakePHP2.0 performance, upgrade shell
PDF
SPL fukuokaphp_1
KEY
モダンmod_perl入門 #yapcasia
PDF
CakePHP最新情報 PHPカンファレンス関西2012
PPT
Cakephp勉強会@tokyo #4
PDF
FukuokaPHP 3
KEY
EC-CUBEプラグイン講義
PPT
How to manage Cakephp @CakePHP_Fukuoka_2
PPT
Cakephp tokyo5
PDF
Hive undocumented feature
PPTX
Php in ruby
PDF
ホームディレクトリに埋もれた便利なコードをさがせ!
PDF
Webサーバのチューニング
PDF
社内勉強会資料(Varnish Module)
PDF
WTM53 phpフレームワーク いまさらcodeigniter
PDF
Niigata.pm #1
PDF
Apacheの展望とmod_perlの超絶技巧 #yapcasia
KEY
Mojoliciousをウェブ制作現場で使ってみてる
PDF
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
PDF
CakePHP2でMySQL Replication
CakePHP2.0 performance, upgrade shell
SPL fukuokaphp_1
モダンmod_perl入門 #yapcasia
CakePHP最新情報 PHPカンファレンス関西2012
Cakephp勉強会@tokyo #4
FukuokaPHP 3
EC-CUBEプラグイン講義
How to manage Cakephp @CakePHP_Fukuoka_2
Cakephp tokyo5
Hive undocumented feature
Php in ruby
ホームディレクトリに埋もれた便利なコードをさがせ!
Webサーバのチューニング
社内勉強会資料(Varnish Module)
WTM53 phpフレームワーク いまさらcodeigniter
Niigata.pm #1
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Mojoliciousをウェブ制作現場で使ってみてる
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
CakePHP2でMySQL Replication

More from ichikaway (20)

PDF
forteeに脆弱性検査をかけてみた VAddy編
PDF
Understanding Computer Architecture with NES Emulator
PDF
VAddyの課金システムを Stripeに乗り換えた話
PDF
Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019
PDF
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019
PDF
現場で使える脆弱性検査サービス VAddy
PDF
OS入門 Fukuoka.php vol.18 LT資料
PDF
Yapc8oji: セキュリティテストサービスを開発運営してきた2年
PDF
VAaddyとは VAddyミートアップvol3_20160629
PDF
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
PDF
脆弱性もバグ、だからテストしよう DevSummiFukuoka
PDF
Vulnerabilities are bugs, Let's test for them!
PDF
脆弱性もバグ、だからテストしよう!
PDF
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
PDF
継続的Webセキュリティテスト testing casual talks2
PDF
Ctf2015 ichikawa Eizoku PM2.5 dial
PDF
VAddy - CI勉強会 fukuoka
PDF
Jenkinsを使った継続的セキュリティテスト
PDF
継続的セキュリティテストVaddy説明資料
PDF
VAddy at LL Diver LT
forteeに脆弱性検査をかけてみた VAddy編
Understanding Computer Architecture with NES Emulator
VAddyの課金システムを Stripeに乗り換えた話
Hello, Worldまで3ヶ月 Golangでファミコンエミュレータ実装 #gocon fukuoka 2019
ゼロから始めるファミコンエミュレータ生活 PHPerKaigi2019
現場で使える脆弱性検査サービス VAddy
OS入門 Fukuoka.php vol.18 LT資料
Yapc8oji: セキュリティテストサービスを開発運営してきた2年
VAaddyとは VAddyミートアップvol3_20160629
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう DevSummiFukuoka
Vulnerabilities are bugs, Let's test for them!
脆弱性もバグ、だからテストしよう!
継続的Webセキュリティテスト PHPカンファレンス関西2015 LT
継続的Webセキュリティテスト testing casual talks2
Ctf2015 ichikawa Eizoku PM2.5 dial
VAddy - CI勉強会 fukuoka
Jenkinsを使った継続的セキュリティテスト
継続的セキュリティテストVaddy説明資料
VAddy at LL Diver LT

CakePHP 1 to 2 Migration tips 100

  • 1. CakePHP 1->2 Migration Tips 100 2013/2/14 Cake Beer Talk
  • 2. Yasushi Ichikawa @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper From 福岡 Fukuoka.php 主催
  • 5. 発売中!! CakePHP2 実践入門   @cakephper / @ichikaway http://d.hatena.ne.jp/cakephper
  • 7. Upgrade Shell ●Cake1.3 のコードを自動変換 ● 全自動ではありません @ichikaway http://cake.eizoku.com/blog/
  • 8. Upgrade Shell $ cd 13/cake/app $ lib/Cake/Console/cake upgrade @ichikaway http://cake.eizoku.com/blog/
  • 9. Upgrade Shell dry-run オプション cake upgrade all --dry-run 実行ログのみ表示 コードは書き換えない @ichikaway http://cake.eizoku.com/blog/
  • 10. Upgrade Shell バージョン管理 git など @ichikaway http://cake.eizoku.com/blog/
  • 11. Upgrade Shell ●all ●全てのオプションを実行 ●tests ●テスト名の変更など ●locations ●ファイル / フォルダ名変更 @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/
  • 14. Upgrade Shell ●components ●Component クラスを継承するように ●exceptions ●cakeError を例外に置換 ●error400, error404, error500 @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/
  • 16. CakePHP 1.2 → 2.3 移行中
  • 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
  • 41. CakePHP 1->2 Migration Tips 31/100 ありがとうございました!