PHP
Laravel

[Laravel] 5.4 => 5.5 のバージョンアップで気になった点を検証


バージョンアップ



  • 5.4 から 5.5 へのバージョンアップを実施

  • その中で気になった変更について実際に動作させて検証

アップグレードガイド


https://readouble.com/laravel/5.5/ja/upgrade.html



リクエスト


hasメソッド


\$request->hasメソッドは、入力が空文字列やnullであってもtrueを返すようになりました。

以前のhasの振る舞いを提供するため、新しい$request->filledメソッドが追加されました。



検証



  • 5.5 では「要素が存在すれば」 true となる

// GETパラメータ

?foo=test&bar

// 検証コード
dd($request->has('foo'), $request->has('bar'), $request->has('baz'));

// 5.4
true
false
false

// 5.5
true
true
false


onlyメソッド


onlyメソッドはリクエストペイロードに実際に存在する属性のみの返すようになりました。

onlyメソッドの古い振る舞いを使いたい場合は、allメソッドを代わりに使用してください。



検証



  • 5.5all()5.4only と同じ挙動になった


  • 5.5only() は存在しないパラメータ指定されても完全無視になった

// GETパラメータ

?foo=test&bar

// 検証コード:5.4(all()は引数受け取れない)
dd($request->all(), $request->only(['foo', 'bar', 'baz']));
// 検証コード:5.5(all()は引数受け取るようになった)
dd($request->all(['foo', 'bar', 'baz']), $request->only(['foo', 'bar', 'baz']));

// 5.4
[
"foo" => "test"
"bar" => ""
]
[
"foo" => "test"
"bar" => ""
"baz" => null
]

// 5.5
[
"foo" => "test"
"bar" => ""
"baz" => null
]
[
"foo" => "test"
"bar" => ""
]


Tinker


Laravel Tinkerはアプリケーションクラスを参照する際の、省略した名前空間をサポートするようになりました。

この機能にはComposerクラスマップの最適化が必要であるため、composer.jsonファイルのconfigセクションへ、optimize-autoloaderディレクティブを追加する必要があります。



optimize-autoloader



  • comopser.json へ追加する

...

"autoload": {
"psr-4": {
"App\\": "app/",
"Modules\\": "app/Modules"
}
},
...
"config": {
...
"optimize-autoloader": true
}


検証

$ php artisan tinker

Psy Shell v0.9.9 (PHP 7.1.26 cli) by Justin Hileman

// 5.4
>>> Modules\Models\BlogModel::all(); // OK
>>> BlogModel::all(); // NG

// 5.5
>>> Modules\Models\BlogModel::all(); // OK
>>> BlogModel::all(); // OK