リリース間近!5.2 の新機能と変更点
この記事は Laravelリファレンス発売記念!販売促進!! Advent Calendar 2015 - Adventar の 12/1 ぶんの記事です。
注意
長いので、ブックマークでもして後で読むといいのではと思います。せっかちな人のためにまずは結論から。
リリースはいつ頃?
まもなくでしょう。昨日(11/30) symfony 2.8 / 3.0 がリリースされました。この両バージョンはAPIの互換性があるようで、Laravelの各 composer.json
には "symfony/http-kernel": "2.8.*|3.0.*",
のように書かれています。
移行すべき?
5.1 のユーザーであれば特に必要を感じないかな…というのが僕の感想です。ただ、非推奨・削除されたクラス・メソッド・関数等がそれなりにあるのでキャッチアップしておかないと、バージョンアップで苦労しそうです。
試してみたい
https://github.com/laravel/laravel.git を git clone
して branch を develop
に切り替えてください。その後に composer install
すれば完了です。
新機能
さて、5.2 の新機能を紹介していきましょう。今回のバージョンアップでは破壊的なものはないので「バージョンあげたいが…ぐぬぬ…」となるようなこともないでしょう。
Implicit model binding
ルートを解決して処理を行う前にパラメータを精査してモデルを findOrFail
あるいは find
した状態でインジェクションする機能です。
<?php // http://localhost:8000/test/1 Route::get('test/{user}', function(\App\User $user) { // find された値が入っている dd($user); }); // http://localhost:8000/users/1 Route::get('users/{user}', 'UserController@index');
注意点としては、ルートパラメーターの名前をモデルの名前と合わせる。test/{user}
の部分ですね。もうひとつは引数にデフォルト値をつけないと findOrFail
が実行されるということです。モデルが見つからない場合でも例外を起こしたくない場合は
<?php // http://localhost:8000/test/1 Route::get('test/{user}', function(\App\User $user = null) { // find された値が入っている dd($user); });
のように引数にデフォルト値をつける必要があります。
Appending output from scheduled tasks
スケジュールの出力を任意のファイルに出せるようになりました。これ 5.2 の新機能として紹介されていますが 5.1 にも入ってます。
Collections Wildcards
Collection でワイルドカードが使えるようになりました。Eloquent 等でリレーションを使うときに便利だと思います。
使い方としてはテストコードが参考になるかと思います。ここらへんとか
Form Array Validation
上記Collections Wildcardsが入ったのもあって Validation で配列を使用する例が楽になっています。
Database Session Driver
データベースにセッションを保存するときのテーブルに user_id, ip_address, user_agent の項目が増えました。互換性を保つために lagacy_database
というドライバが増えています。このドライバは5.2で非推奨となっており、おそらく 5.3 で削除されるでしょう。
新機能はざっくりと以上です。次は変更点を。長いです
削除されたもの
5.1 で非推奨になったものが削除されました
- コントローラフィルタ が削除
- beforeFilter/afterFilter
- ミドルウェアを使おう
- Container#bindShared が削除
- singleton を使おう
- 使ってる拡張が多いので注意
- Eloquent/QueryBuilder の pluck メソッド
- value メソッドを使おう
- Collection から fetch メソッドが削除
- pluck を使う(ややこしい)
- list メソッドから pluck メソッドへ
- config/mail.php の pretend オプションが削除
- driver を log にしよう
- Cacheの
section
メソッドが削除tags
メソッドを使おう
- QueryBuilder の
getFresh
を削除 - DispatchesCommands
- DispatchesJobs を使おう
- ShouldBeQueued
- ShouldQueue を使おう
- queue:subscribe コマンドが削除
- Iron.io ユーザーしか困らないはず(ちょっと詳しくない)
非推奨
- Strクラスの
randomBytes
メソッドが非推奨に- php7 の random_bytes を視野に?
- 5.3 は php7 か?
- Route::controller / Route::controllers が非推奨(5.3で削除)
- Collection の lists メソッドが非推奨に
- pluck メソッドを使おう
- array_build が非推奨
小さな変更
Facade
クラスのgetFacadeAccessor
が abstract メソッドに- Seeder クラスの run メソッドが abstract メソッドに
- guzzlehttp/guzzle ~6.0
- php7 の Throwable サポート
- validateSame/validateDifferent が型までチェックするようになった
現場からは以上です。
宣伝
一番大事なこと忘れてた…
発売されます!よろしくおねがいします!