cakephp - the point of upgrade

66
CakePHP The Point of Upgrade 1.3 2.x to @slywalker (Yasuo Harada) and for 3.x from

Upload: yasuo-harada

Post on 24-May-2015

1.603 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: CakePHP - The point of upgrade

CakePHPThe Point of Upgrade

1.3 2.xto@slywalker (Yasuo Harada)

and for 3.xfrom

Page 2: CakePHP - The point of upgrade
Page 3: CakePHP - The point of upgrade

about me

Page 4: CakePHP - The point of upgrade

@slywalker

Page 5: CakePHP - The point of upgrade

@slywalkerfollow me!

Page 6: CakePHP - The point of upgrade

github.com/slywalker

Page 7: CakePHP - The point of upgrade

github.com/slywalkerfork me!

Page 8: CakePHP - The point of upgrade

TwitterBootstrap Plugingithub.com/slywalker/TwitterBootstrap

Page 9: CakePHP - The point of upgrade

182 stars ★

TwitterBootstrap Plugingithub.com/slywalker/TwitterBootstrap

Page 10: CakePHP - The point of upgrade

本日のお題

CakePHP移行ガイド

1.3 2.xから への

そして へ...3.x

Page 11: CakePHP - The point of upgrade

book.cakephp.org/2.0/ja/appendices.html

ここを読んでもらったら終わってしまう話なんですが…

Cookbook

Page 12: CakePHP - The point of upgrade

要点

Cookbookには書いていない経験から学んだ←をお届け

Page 13: CakePHP - The point of upgrade

将来に備えて

一日にして成らず

これが基本だ

Page 14: CakePHP - The point of upgrade

これが基本だ柔道で言えば受身

Page 15: CakePHP - The point of upgrade

1.3 2.xから へ★ ディレクトリ構造、ファイル名およびクラス名の変更

★ __() → echo __()$html->link() → $this->Html->link()

★ 廃止されたグローバル関数や定数

★ cakeError → 例外処理

★ $this->data → $this->request->data

★ Componentクラスの継承元 Object → Component

★ Configure::read() → Configure::debug('debug')

Page 16: CakePHP - The point of upgrade

結構これって面倒くさいですよねぇ…

そこはCakePHPのコアデベロッパーさすがです!

Page 17: CakePHP - The point of upgrade

あるんです!

便利な道具が

Page 18: CakePHP - The point of upgrade

あるんです!

便利な道具がUpgrade shell

Page 19: CakePHP - The point of upgrade

まぁ、コアデベロッパー自身が多くのCakePHP製の案件を抱えてるでしょうから当然でしょう。

Page 20: CakePHP - The point of upgrade

Usage:cake upgrade [subcommand] [-h] [-v] [-q]

Subcommands:

all Run all upgrade commands.tests Update tests class names to FooTest rather than FooTestCase.locations Move files and folders to their new homes.i18n Update the i18n translation method calls.helpers Update calls to helpers.basics Update removed basics functions to PHP native functions.request Update removed request access, and replace with $this->request.configure Update Configure::read() to Configure::read('debug')constants Replace Obsolete constantscomponents Update components to extend Component class.exceptions Replace use of cakeError with exceptions.

Console/cake upgrade -h

Page 21: CakePHP - The point of upgrade

Upgrade

@ichikawayCon

sole/c

ake up

grade

all

詳しく載ってます!

だいたいのことは

shellこの人が書いたよ

Page 22: CakePHP - The point of upgrade

会場には筆者の方々が来られています。

懇親会のときにグリグリ突っ込んだ質問を皆さんしてみましょう。

Page 23: CakePHP - The point of upgrade

Upgrade shellでできないこと?

Page 24: CakePHP - The point of upgrade

.htaccesscore.php

index.phpbootstrap.php

要書換

Page 25: CakePHP - The point of upgrade

基本的にはコピペでいけます。

ここらへんのファイルをグリグリいじってしまった方はご愁傷様です。

Page 26: CakePHP - The point of upgrade

特にややこしいことをしていないアプリケーションだったら、Upgrade shellとファイルのコピペで動くようになります。

Page 27: CakePHP - The point of upgrade

すごいですね

Page 28: CakePHP - The point of upgrade

ちなみに先ほどの「ややこしいこと」とは

SecurityComponentAuthComponentなど使っていると、要修正です。

Page 29: CakePHP - The point of upgrade

このへんの修正は、Upgrade shellのあとエラーを潰していく感じです。

CookbookとかAPI見ながらとか…

Page 30: CakePHP - The point of upgrade

一日にして成らずやっぱり手間やん…

Page 31: CakePHP - The point of upgrade

その前に!

gradeUp

Page 32: CakePHP - The point of upgrade

1.3本当に最新のコード?

Page 33: CakePHP - The point of upgrade

良くも悪くも後方互換がしっかりしてる

Page 34: CakePHP - The point of upgrade

知らずしらずのうちに時代遅れのコードを書いていることがよくあります。(だってそれで動くんだもの…)

Page 35: CakePHP - The point of upgrade

$articles = $this->Article->find( 'all', array( 'conditions' => array( 'Article.status' => 'enable' ) )); 1.3 2.x

例えば find

Page 36: CakePHP - The point of upgrade

1.3Model::find( $conditions = null, $fields = array(), $order = null, $recursive = null)

Page 37: CakePHP - The point of upgrade

懐かしい引数たちです。

null,nullフレームワークと呼ばれていた頃の名残です。

Page 38: CakePHP - The point of upgrade

2.xModel::find( $type = 'first', $query = array())

Page 39: CakePHP - The point of upgrade

見事にバッサリとキレイになってますね。

メジャーバージョンが上がると非推奨の部分はこのように切り捨てられます。

Page 40: CakePHP - The point of upgrade

Folder::mkdir()Folder::mv()Folder::ls()Folder::cp()Folder::rm()Set::isEqual()String::getInstance()CakeSession::del()

1.3非推奨

Page 41: CakePHP - The point of upgrade

この他にも、引数が変更になったり新しいオプションが増えたりしています。

Page 42: CakePHP - The point of upgrade

今まで面倒くさかったりそもそも、できなかったことがコッソリと簡単にできるようになっていることは、よくあることです。

Page 43: CakePHP - The point of upgrade

1.3非推奨コードを全てなくす!

Page 44: CakePHP - The point of upgrade

将来に備えて

来たるべき

Page 45: CakePHP - The point of upgrade

deprecatedこれまでの説明でアップグレードの

重要な点がお解りいただけたでしょうか?

Page 46: CakePHP - The point of upgrade

非推奨が出てくるタイミング

2.2.3 バグフィックス

機能の追加改良・非推奨の追加

PHPのバージョンサポート変更・非推奨のサポート停止

Page 47: CakePHP - The point of upgrade

1.x系はグダグダでしたが2.x系はこのポリシーがしっかりと守られているようです。

Page 48: CakePHP - The point of upgrade

すでに2.0の段階で非推奨になってしまったかわいそうなクラスもあります。

Page 49: CakePHP - The point of upgrade

EmailComponent

CakeEmail

非推奨

Page 50: CakePHP - The point of upgrade

CakeEmail<?phpApp::uses('CakeEmail', 'Network/Email');

$email = new CakeEmail();$email->template('welcome', 'fancy') ->emailFormat('both') ->to('[email protected]') ->from('[email protected]') ->send();

Page 51: CakePHP - The point of upgrade

コンポーネント形式ではなく、ライブラリ形式で提供されるようになりました。

チェーンメッソドなモダンなつくりになっています。

ShellやModelの中でも使いやすくなりました。

Page 52: CakePHP - The point of upgrade

2.xもうすぐ非推奨?

Page 53: CakePHP - The point of upgrade

正式に非推奨のアナウンスはありませんが、今後そうなりそうなものもいくつか見受けられます。

Page 54: CakePHP - The point of upgrade

非推奨か?RequestHandlerComponentCakeRequest

Page 55: CakePHP - The point of upgrade

<?php$this->RequestHandler->isAjax();$this->request->is('ajax');$this->request->isAjax();

$this->RequestHandler->isPost();$this->request->is('post');$this->request->isPost();

$this->RequestHandler->isSSL();$this->request->is('ssl');$this->request->isSsl();

Page 56: CakePHP - The point of upgrade

RequestHandlerでできることで、CakeRequestでできるものがあれば、今のうちに変更しておいたほうがいい。

RequestHandler自体はなくならないと思います。ちゃんと独立した役割を持ってるので。

Page 57: CakePHP - The point of upgrade

Cake 超便利

Request$this->request

Page 58: CakePHP - The point of upgrade

<?php// 1.x$this->params['controller'];// 2.x$this->request->controller;$this->request['controller'];$this->request->params['controller'];

CakeRequestオススメ

Page 59: CakePHP - The point of upgrade

<?php// Passed arguments// 1.x$this->params['pass'];// 2.x$this->request->pass;$this->request['pass'];$this->request->params['pass'];

CakeRequest

オススメ

Page 60: CakePHP - The point of upgrade

<?php// named parameters// 1.x$this->params['named'];// 2.x$this->request->named;$this->request['named'];$this->request->params['named'];

CakeRequest

オススメ

Page 61: CakePHP - The point of upgrade

<?php// url is /posts/index?page=1&sort=title// 1.x$this->params['url']['page'];// 2.x$this->request['url']['page'];$this->request->query['page'];$foo = $this->request->query('not_exist');// $foo === null

CakeRequest

オススメだが、まだ実装されてない

Page 62: CakePHP - The point of upgrade

<?php// 1.x$value = $this->data['Post']['title'];// 2.x$value = $this->request->data['Post']['title'];$value = $this->request->data('Post.title');$foo = $this->request->data('not_exist');// $foo === null

$this->request->data('Post.title', 'New post') ->data('Comment.1.author', 'Mark');

CakeRequest

Page 63: CakePHP - The point of upgrade

メソッドが実装されているものはそれを使ったほうが後々よさそうな雰囲気です。

3.xはオブジェクトObjectしたフレームワークになりそうですね。

2.xも徐々にその方向で準備されていくと思います。

Page 64: CakePHP - The point of upgrade

(業務連絡:

〆の話をお願いします。)

Page 65: CakePHP - The point of upgrade

質問ありますか?

Page 66: CakePHP - The point of upgrade

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