2015年12月21に、Laravel 5.2がリリースされました。
そろそろ安定してきているだろうと思い、手元の開発環境のLaravel 5.1を5.2にアップグレードしてみました。
Laravel 5.1からLaravel 5.2へのアップグレード手順書
まず現行バージョンを確認します。
1 2 |
# php artisan --version Laravel Framework version 5.1.35 (LTS) |
composer.jsonを修正します。
1 2 3 4 5 6 7 8 9 |
"require": { "php": ">=5.5.9", "laravel/framework": "5.2.*", "laravelcollective/html": "5.2.*", }, "require-dev": { "symfony/dom-crawler": "~3.0", "symfony/css-selector": "~3.0" }, |
config/app.php を編集して不要になった以下のproviderを削除します。
Illuminate\Foundation\Providers\ArtisanServiceProvider::class
Illuminate\Routing\ControllerServiceProvider::class
これを削除しておかないと、後でExceptionが発生します。
composer updateします。
1 |
# composer update |
アップデートが開始されました。
しばらく順調にアップデートされているように見えましたが、こんなエラーが出てしまいました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
> php artisan optimize Script php artisan optimize handling the post-update-cmd event returned with err or code 255 Fatal error: Uncaught exception 'ReflectionException' with message 'Class log do es not exist' in C:\xampp\htdocs\blog\vendor\laravel\framework\src\Illuminate\Co ntainer\Container.php on line 738 ReflectionException: Class log does not exist in C:\xampp\htdocs\blog\vendor\lar avel\framework\src\Illuminate\Container\Container.php on line 738 Call Stack: 0.2040 142464 1. {main}() C:\xampp\htdocs\blog\artisan:0 0.3370 1806592 2. Illuminate\Foundation\Console\Kernel->handle() C:\xam pp\htdocs\blog\artisan:36 0.3640 1896840 3. Illuminate\Foundation\Console\Kernel->reportException () C:\xampp\htdocs\blog\vendor\laravel\framework\src\Illuminate\Foundation\Conso le\Kernel.php:109 0.3640 1896928 4. Illuminate\Container\Container->offsetGet() C:\xampp\ htdocs\blog\vendor\laravel\framework\src\Illuminate\Foundation\Console\Kernel.ph p:261 0.3640 1896928 5. Illuminate\Foundation\Application->make() C:\xampp\ht docs\blog\vendor\laravel\framework\src\Illuminate\Container\Container.php:1178 0.3640 1897008 6. Illuminate\Container\Container->make() C:\xampp\htdoc s\blog\vendor\laravel\framework\src\Illuminate\Foundation\Application.php:697 0.3640 1897096 7. Illuminate\Container\Container->build() C:\xampp\htdo cs\blog\vendor\laravel\framework\src\Illuminate\Container\Container.php:633 0.3640 1897096 8. Illuminate\Container\Container->Illuminate\Container\ {closure}() C:\xampp\htdocs\blog\vendor\laravel\framework\src\Illuminate\Contain er\Container.php:735 0.3640 1897144 9. Illuminate\Foundation\Application->make() C:\xampp\ht docs\blog\vendor\laravel\framework\src\Illuminate\Container\Container.php:230 0.3640 1897144 10. Illuminate\Container\Container->make() C:\xampp\htdoc s\blog\vendor\laravel\framework\src\Illuminate\Foundation\Application.php:697 0.3640 1897208 11. Illuminate\Container\Container->build() C:\xampp\htdo cs\blog\vendor\laravel\framework\src\Illuminate\Container\Container.php:633 0.3890 1936008 12. Illuminate\Container\Container->getDependencies() C:\ xampp\htdocs\blog\vendor\laravel\framework\src\Illuminate\Container\Container.ph p:779 0.3900 1945808 13. Illuminate\Container\Container->resolveClass() C:\xam pp\htdocs\blog\vendor\laravel\framework\src\Illuminate\Container\Container.php:8 08 0.3900 1945872 14. Illuminate\Foundation\Application->make() C:\xampp\ht docs\blog\vendor\laravel\framework\src\Illuminate\Container\Container.php:853 0.3900 1945952 15. Illuminate\Container\Container->make() C:\xampp\htdoc s\blog\vendor\laravel\framework\src\Illuminate\Foundation\Application.php:697 0.3900 1946000 16. Illuminate\Container\Container->build() C:\xampp\htdo cs\blog\vendor\laravel\framework\src\Illuminate\Container\Container.php:633 0.3900 1946176 17. ReflectionClass->__construct() C:\xampp\htdocs\blog\v endor\laravel\framework\src\Illuminate\Container\Container.php:738 Xxx@xxx-pc c:\xampp\htdocs\blog # |
いろいろと調査してみると、こんな記述を見つけました。
Some people don't seem to understand how vars work and add spaces without adding double quotes for some reason.
どうやら、私の場合、.envの中の指定で、以下のようにスペースがある記述がまずかったようです。
修正前
1 |
MAIL_FROM_NAME=XXX Admin |
修正後
1 |
MAIL_FROM_NAME="XXX Admin" |
スペースがある項目の記述をダブルクォーテーション""で囲むように修正後、composer update すると正常にアップデートされました。
Laravelのバージョンを確認します。
1 2 |
# php artisan --version Laravel Framework version 5.2.32 |
無事にアップグレード完了したのでしょうか?
config/auth.phpも修正必要
Apacheを起動してブラウザから確認してみると、エラー発生しました。
1 2 3 4 5 6 7 8 9 10 |
InvalidArgumentException in AuthManager.php line 86: Auth guard [] is not defined. in AuthManager.php line 86 at AuthManager->resolve(null) in AuthManager.php line 70 at AuthManager->guard() in AuthManager.php line 288 at AuthManager->__call('check', array()) in Facade.php line 215 at AuthManager->check() in Facade.php line 215 at Facade::__callStatic('check', array()) in WelcomeController.php line 91 at Auth::check() in WelcomeController.php line 91 |
どうやら、config/auth.php も修正があるようなので、本家の Laravelのソースファイル をダウンロードしてauth.phpを上書きコピーしました。
Laravel 5.2では、config/xxx.php はいろいろと修正が入った様なので、アップデートがうまくいかない、または、アップデート後にちゃんと起動しない場合は、config/xxx.phpを確認するとよいと思います。
punycodeのvalidation
実は私が、Laravel 5.2を使ってみたい大きな理由は、日本語のURLの入力チェックを行いたかったのです。
Laravel 5.1で、例えば、URLを入力するフィールドを作って、入力チェックをするときに以下のように記述したとします。
1 2 3 4 5 6 7 8 9 |
public function rules() { return [ 'サイト名' => 'required', 'サイトURL' => 'required|url', ]; } |
この時、日本語のURLを入力するとエラーになってしまいます。
日本語のURL、Punycodeについては以下で説明しておきました。
この件は、すでに以下の通り修正されているようなので、Laravel 5.2なら大丈夫だと思っていたのです。
URL validation fails for international domains #10088
実際に試してみると、
日本語URLのバリデーション(validation)がちゃんと機能していました。
よかった、よかった。
コメント