Hiroto's diary

プログラミング関連を書くかも

Laravelのバージョンを5.1から5.3にアップグレードした時のメモ

かなり前に個人的に開発しているアプリで使ってるLaravelのバージョンを5.1 LTSから5.3にアップグレードした。Laravel 5.1はLTSなのでアップグレードの必要は基本的には無さそうですが、新しい物好きなのでアップグレードしてみた。

Laravelのアップグレードはまともにやったことがないのでメモがてらここに書いていきます。間違っているところや正しいやり方があったら教えてください。

参考

環境 (アップデート時)

PHPのバージョン : 7.0.9

Laravel 5.1.42 -> 5.3.0

アップグレード

composer.jsonを書き換える

PHPのバージョンの書き換え

requirephpのバージョンを書き換える。

5.1では>=5.5.9だったが5.3では>=5.6.4になってるので書き換える。

"require": {
    "php": ">=5.6.4"
}

Laravelのバージョンを書き換える

composer.jsonに書いてあるLaravelのバージョンを書き換える。laravelcollective/annotationsを使ってるなら、ついでにlaravelcollective/annotationsのバージョンも上げる。

"require": {
    "php": ">=5.6.4",
    "laravel/framework": "5.3.*",
    "laravelcollective/annotations": "5.3.*"
}

composer.jsonのrequire-devを書き換える

PHPUnitのバージョンが~5.0に上がって、いくつかのパッケージが追加されてる。追加されたのは5.2の時だったはず。

"require-dev": {
    "phpunit/phpunit": "~5.0",
    "symfony/css-selector": "3.1.*",
    "symfony/dom-crawler": "3.1.*"
}

composer updateを実行する

composer.jsonを書き換えたら内容をcomposer.lockにも適用させます。composer updateコマンドを実行してLaravelのバージョンを上げる。サービスブロバイダーが無いとか怒らるが後回し。

composer.jsonのscriptを書き換える

Laravel 5.2の途中からcomposer.jsonscripts中でIlluminate\Foundation\ComposerScriptsを使うようになったので追加。

"scripts": {
    "post-root-package-install": [
        "php -r \"file_exists('.env') || copy('.env.example', '.env');\""
    ],
    "post-create-project-cmd": [
        "php artisan key:generate"
    ],
    "post-install-cmd": [
        "Illuminate\\Foundation\\ComposerScripts::postInstall",
        "php artisan optimize"
    ],
    "post-update-cmd": [
        "Illuminate\\Foundation\\ComposerScripts::postUpdate",
        "php artisan optimize"
    ]
}

configを変更

追加分を書き足しても良いけど、結構変わってる部分があるので丸々コピペして自分で変更している部分だけ追加した方が速い。

再度composer update

さっきのサービスブロバイダーが無いというエラーは、設定ファイルの更新で解消出来たので再度composer updateする。今度はエラーが出ないはず。

内部コードの書き換え

Laravel 5.2,5.3で変わった挙動、削除/非推奨なメソッドがあるので書き換える。自分がやった事だけなのでこれで全てではありません。

この辺はlaravel/laravelを見ながら書き換えたほうがいいかもしれません。

Middleware Groupに対応させる

5.2からの新機能。

App\Http\Kernel.php

<?php
// これを追加する
/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

    'api' => [
        'throttle:60,1',
    ],
];

BroadcastServiceProviderの作成

5.3から追加されてたっぽいので追加。laravel/frameworkからコピペでネームスペース置き換えが楽。

AuthServiceProvider,RouteServiceProviderの変更

結構コードが変わっているのでコピペしてネームスペースを変えた。

EventServiceProviderを変更

boot()メソッドが変わっている。

変更前

<?php
//省略
    public function boot(DispatcherContract $events)
    {
        parent::boot($events);
    }

変更後 php <?php //省略 public function boot() { parent::boot(); }

ControllerのbeforeFilterメソッドが廃止

このメソッドは5.1で非推奨になって5.2で削除。beforeFilterを使っているなら、代わりにミドルウェアを使う。

Route::controllerメソッドが廃止

5.2で非推奨になって5.3で削除。Route::get,Route::postを使ってルートを指定するなり、laravelcollective/annotationsを使うようにする。

バリデーションルールの仕様変更

nullを許容する場合はルールにnullableを追加する必要がある。これ以外にもあるはずだけど自分の環境ではこれだけだった。

© 2015-2017 Hiroto-K