Symfony2.0から2.8へのバージョンアップ
こんにちは、光永です。
今回は(も?)Symfonyのバージョンアップをやったのでその記事を書きました。バージョンアップマン
2.0からのバージョンアップは苦痛だ~~~
はりきっていきましょう!
はじめに
今回はSymfony2.0→2.3→2.8と経由してあげてみることにしました。
理由は単に直接上げたらエラーがいっぱい出すぎて心折れそうだったからです。
ということでだらっとやったことを書いておきます
めも
- Symfoyn各バージョンのデフォルト構成はここ
旧verにないものがあればここからDL・コピーして作成する - Update情報は以下の各バージョンのものを頑張って確認
- 所要時間
- 2.0→2.3: 1.5日
→formを作りこんでいたため地獄に - 2.3→2.8: 15分
- 2.0→2.3: 1.5日
手順
※ 2.0→2.3・2.3→2.8とも、基本的には以下の手順です
※ 2.3→2.8は以下の記事もご参考に~~
https://www.kuzilla.co.jp/20160516_symfony2_2_3_to_2_8
2.0 => 2.3
1. SymfonyのUPDATE
- app/AppKernel.phpを修正
app/config/config.ymlを修正
composer.pharをDLor適当なプロジェクトからコピーしてくる
- composer.jsonをつくる。Symfony2.3のcomposer.jsonをgithubからコピー
- いつものコマンドを実行
- 以下のエラーが発生
- app/config/parameter.yml,app/config/parameter.yml.distがないよ!
→githubから取ってきて作成+parameter.iniから内容をコピー - bootstrapファイル作成に失敗!
→autoload.phpがの内容がだいぶ違っていたので、githubから取ってきてひとまず2.3の内容に修正 - AppKernelで呼び出してるサードパーティ製バンドルがないよ!
→depsファイルにあるプラグインの情報を参考に、composer.jsonに追記 - JSM\SecurityExtraBundle\JMSSecurityExtraBundle() でエラー
→(そもそもJMSSecurityExtraBundleは必要なのかしら・・・)→対象のプロジェクトでは@Secureのアノテーションが利用されていない=使ってないのでとりあえずすてちゃえ→AppKernelからコメントアウト+configからコメントアウト
- app/config/parameter.yml,app/config/parameter.yml.distがないよ!
- 以下のエラーが発生
2. 古いファイルの差し替え
- 古いファイルがそのままになっていますので、以下ファイルをgithubから取ってきて適宜作成・差し替えします
- web/app.php
- web/app_dev.php
- web/config.php
- app/SymfonyRequirements.php(作成)
- app/check.php
- 以下でエラーが出てなければおおよそOKです
- app/check.phpを実行
- ここでapp/cache、app/logsにアクセスできません!と言われました
フォルダがないのが原因ですので、作ります。
- ここでapp/cache、app/logsにアクセスできません!と言われました
- config.phpのページにアクセス
- app/check.phpを実行
3. ひとまず動作確認
ここでapp_dev.phpにアクセスしてみるのですが・・・
つ http://stackoverflow.com/questions/10949525/symfony2-cannot-load-resource
4. ソースを修正
※ 詳細はSymfonyのUPGRADEをみてね!★ミ
※ とりあえず対応が面倒だったものなどをピックアップしてお届け
- twig: render問題
- 正規表現マンだ!!新しい顔よ!\一発置換/
パラメータついてるやつ↓
ついてないやつ
↓
- 正規表現マンだ!!新しい顔よ!\一発置換/
- twig: app.session問題(2.0=>2.1)
- twig:
_form_is_choice_group
問題(2.0=>2.1)- https://github.com/symfony/symfony/blob/2.8/UPGRADE-2.1.md#bc-breaks-in-themes-and-html
- メソッドなくなった・・・ TwigExtensionで実装
- symfony: ChoiceListInterface問題(2.0=>2.1)
- https://github.com/symfony/symfony/blob/2.8/UPGRADE-2.1.md#other-bc-breaks
- \メソッドめっちゃ増えてる/
結局配列でデータを起こす→ new ArrayChoiceList($array) でつくりかえました・・・ ここで軽く脳死タイム突入
- symfony: FormBuilder問題(2.0=>2.1)
- SymfonyあるあるのInterfaceとClassさしかえといたよ問題だ~~~~
- https://github.com/symfony/symfony/blob/2.8/UPGRADE-2.1.md#form
- symfony: $form->bindRequest/bind/submit 問題(2.0~)
- Symfonyあるある2の気に入るまでメソッド名直し続ける問題だ~~~~
この関連はほんと計画性なさすぎとりあえず以下で置換だ!
- Symfonyあるある2の気に入るまでメソッド名直し続ける問題だ~~~~
- symfony: addValidator削除
- 以下の通り修正
BEFOREAFTER
- 以下の通り修正
- symfony: form defaultOptions問題
- エラーが出たよーーー
- setDefaultOptionsでなくgetDefaultOptionsで定義されていたのが問題らしい
前後
一旦動いたのでとりあえず終了!
ここで多少問題が残っても、2.8系の素晴らしいデバッグ環境にしてから対応したほうが効率は良いです!
2.3 => 2.8
1. composer update
- 公式のcomposer.jsonを見つつ、composer.jsonを適度書き換えます
https://github.com/symfony/symfony-standard/blob/2.8/composer.jsonエラーだー・・・
つhttp://stackoverflow.com/questions/33983632/fatal-error-class-symfony-component-console-input-argvinput-not-found-in-app
sensio/distribution-bundle
がversion5.*になったら死ぬぞ!ということなのでcomposer.jsonを再度修正OKでしたー
2. ファイルの差し替え
- web/app.php, web/app_dev.php, app/console が変わっていたので2.3のときもやりましたが再度差し替えます
- 差し替え終了したら、キャッシュをけしてから再実行します
面倒なのでcache以下のフォルダをザクッと物理削除だ! - \うごいた/
3. もんくをいう
- 2.3から2.8は2.0=>他に比べてだいぶ簡単なんですよね~・・・やっぱ*.0ってつくものはちょっと危険ですわいぶちぶち
おわりに
2.1系~composerが導入されたりconfig.ymlの書き換えとBundleの追加、Form周りの変更がやたらおおくて地獄でした。
差分を一覧にしてくれたらいいのに・・・
以上!お役に立てましたら幸い!
光永でした