PHP
laravel5
Laravel5,2

Laravel 5.2 の新機能

More than 1 year has passed since last update.

2015年12月21日にリリースされたLaravel 5.2の新機能まとめ。

以下は、Laravel NewsのLaravel 5.2 is released!の翻訳。文章がこなれていないところや翻訳が怪しいところもあるが、何かあればご連絡ください。

Auth Scaffolding

auth scaffoldingは、認証、登録、パスワードリセットのためのビューファイルの基本セットを自動作成する機能。以下の方法で実行する:

php artisan make:auth

暗黙のモデルバインディング

暗黙のモデルバインディングはモデルをルートに自動的にバインドする新機能。こちらがサンプルコード:

Route::get('/api/posts/{post}', function(Post $post) {
    return $post;
});

これが裏でやっているのは、Post::findOrFail($post)をコールして、$post変数に注入することだ。熟練したLaravel開発者にとっては、これは既存のルートモデルバインディングに似ているが、手動でバインドするステップが不要となった。

スケジュールされたタスクからの出力を追加

Laravel Schedulerは、タスクからの出力をファイルに追記できるようになった。

$schedule->command('emails:send')
    ->hourly()
    ->appendOutputTo($filePath);

以前Laravelには、現在の結果をファイルに書き出すが追記はしないsendOutputToオプションは存在した。

Laravel 5.2フォーム配列バリデーション

以下のような入力フィールドの配列を持つフォームがあるとしよう:

<p>
<input type="text" name="person[1][id]">
<input type="text" name="person[1][name]">
</p>
<p>
<input type="text" name="person[2][id]">
<input type="text" name="person[2][name]">
</p>

Laravel 5.1では、これらにバリデーションルールを付け加えるにはループしながら個々にバリデーションルールを付け加える必要があった。それをする必要はなくなり、このようにLaravelizeされた:

$v = Validator::make($request->all(), [
  'person.*.id' => 'exists:users.id',
  'person.*.name' => 'required:string',
]);

コレクションワイルドカード

コレクションを使ってデータを取り出すとき、*をワイルドカードとして渡せば良くなった。

$posts->pluck('posts.*.title');

これはすべてのpostsのすべてのtitleを返す。

データベースセッションドライバ

データベースセッションドライバはuser_idとip_addressを含むようになった。そのため、あるユーザのすべてのセッションをクリアすることが簡単にできるようになった。

ミドルウエアグループ

ミドルウェアグループは、いくつかのルートミドルウェアを一つの便利なキーによってグループ化して、複数のミドルウェアを一度にルートに割り当てることが可能となった。たとえば、Web UIとAPIを同じアプリケーション内で構築する場合に便利だ。セッションとCSRFルートをWebグループに入れ、レートリミッターをAPIグループに入れるなどできる。

レート制限

新しいレートリミッターミドルウェアがフレームワークに含まれており、特定のIPアドレスから出されたリクエストの数を指定された時間に渡り簡単に制限することができる。たとえば、単一のIPアドレスからのリクエストを毎分60回に制限するには次のようにする:

Route::get('/api/users', ['middleware' => 'throttle:60,1', function () {
    //
}]);

Eloquentグローバルスコープ

過去のいくつかのLaravelのバージョンでは、グローバルEloquentスコープは複雑で実装に誤りがあった。しかし、Laravel 5.2では、グローバルクエリスコープは単一の簡単なメソッド、つまりapplyを実装するだけで良い。

グローバルスコープを実装するための詳しい情報は、Eloquentドキュメントをチェックのこと。

(original English article was written by Eric L. Barnes)