SlideShare une entreprise Scribd logo
1  sur  41
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 主催
発売中!!
           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


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

Contenu connexe

Tendances

はじめての FuelPHP
はじめての FuelPHPはじめての FuelPHP
はじめての FuelPHP
Sho A
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
Yusuke Ando
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
kenjis
 

Tendances (20)

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

En vedette

An Introduction to CakePHP
An Introduction to CakePHPAn Introduction to CakePHP
An Introduction to CakePHP
elliando dias
 

En vedette (14)

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

Similaire à CakePHP 1 to 2 Migration tips 100

CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012CakePHP最新情報 PHPカンファレンス関西2012
CakePHP最新情報 PHPカンファレンス関西2012
ichikaway
 
How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2
ichikaway
 
Cakephp tokyo5
Cakephp tokyo5Cakephp tokyo5
Cakephp tokyo5
ichikaway
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
tamtam180
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
do_aki
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
jamadam
 

Similaire à CakePHP 1 to 2 Migration tips 100 (20)

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

Plus de ichikaway

VAddy at LL Diver LT
VAddy at LL Diver LTVAddy at LL Diver LT
VAddy at LL Diver LT
ichikaway
 

Plus de ichikaway (20)

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

Dernier

Dernier (7)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

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 主催
  • 3.
  • 4.
  • 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 ありがとうございました!