localdisk

PHP とか Java とか Web とか好きなことを書きます。

リリース間近!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.gitgit 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 等でリレーションを使うときに便利だと思います。

[5.2] Add support for nested indexed arrays to array_pluck and data_get by JosephSilber · Pull Request #10709 · laravel/framework · GitHub

使い方としてはテストコードが参考になるかと思います。ここらへんとか

Form Array Validation

上記Collections Wildcardsが入ったのもあって Validation で配列を使用する例が楽になっています。

Database Session Driver

データベースにセッションを保存するときのテーブルに user_id, ip_address, user_agent の項目が増えました。互換性を保つために lagacy_database というドライバが増えています。このドライバは5.2で非推奨となっており、おそらく 5.3 で削除されるでしょう。

新機能はざっくりと以上です。次は変更点を。長いです

削除されたもの

5.1 で非推奨になったものが削除されました

非推奨

  • Strクラスの randomBytes メソッドが非推奨に
    • php7 の random_bytes を視野に?
    • 5.3 は php7 か?
  • Route::controller / Route::controllers が非推奨(5.3で削除)
  • Collection の lists メソッドが非推奨に
  • array_build が非推奨

小さな変更

  • Facade クラスの getFacadeAccessor が abstract メソッド
  • Seeder クラスの run メソッドが abstract メソッド
  • guzzlehttp/guzzle ~6.0
  • php7 の Throwable サポート
  • validateSame/validateDifferent が型までチェックするようになった

現場からは以上です。

宣伝

一番大事なこと忘れてた…

www.amazon.co.jp

発売されます!よろしくおねがいします!