Help us understand the problem. What is going on with this article?

Laravel 5.2 追加機能とかメモ

Laravel 5.2 が出たので、変更箇所とかぼんやり眺める系メモ

追記 -- 2016/01/29

  1. iron-mq の事, 設定のこと, Cashierのこと

Authenticate Multi-Auth

複数のテーブルにユーザ情報を置いている場合、例えば admin テーブルと student テーブルがある場合などの時に対応。っぽい。

これに伴い、config/auth.phpやら認証周りの内容が変わるので、アップグレード時は注意。

see: https://github.com/laravel/laravel/blob/v5.2.0/config/auth.php

Authentication Scaffolding

php artisan make:auth でBootstrapを使ったログイン画面、登録画面、パスワードリセット画面を生成する。( ただし、新規アプリケーションのみで、アップグレードでは…)

Route::model

Route URL からモデルを引っ張ってこれるようになった。

routes.php
<?php

use App\User;

Route::get('/user/{user}', function (User $user) {
    return $user;
});

{user} はタイプヒンティングで Eloquent Model から自動的に引っ張ってくる。

Middleware Group

ミドルウェアをグループ化することで、今ではRouteで複数指定しているのを、短くすることができる。

App\Http\Kernel.php
/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

    'api' => [
        'throttle:60,1',
    ],
];
routes.php
<?php
Route::group(['middleware' => ['web']], function () {
    //
});

Rate Limitting

新しい標準のMiddlewareに、IPアドレスからのリクエスト制限をするMiddlewareが追加。

下記の例だと、1つのIPから毎分60リクエストを上限にする。

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

Array Validation

FormRequst に配列を指定した場合、Validation を指定する方法がRequest::rules の中でループを回してValidationを追加していく形だったけど、それをしなくて良くなった。

<?php
$validator = Validator::make($request->all(), [
    'person.*.email' => 'email|unique:users'
]);

Languageファイルなどでメッセージを書く時は下記のようになる

'custom' => [
    'person.*.email' => [
        'unique' => 'Each person must have a unique e-mail address',
    ]
],

Eloquent Global Scope

よくわかんない。 http://laravel.com/docs/5.2/eloquent#global-scopes

Illuminate\Support\Collection に追加

pluck, keys, zip, collapse, flatten, flip それぞれのメソッドを追加

CSRF Verification

影響ないと思うけど、CSRF対策はunit test時には動かなくなりました。

Event まわり

Event名変更が16個ある。そして、Closureの引数が変更。例えば、DB::listen は下記のような変更になる。

<?php

// Laravel 5.1系
DB::listen(function($sql, $bindings, $time) {
    // hogehoge
});

// Laravel 5.2系
DB::listen(function ($event) {
    dump($event->sql);
    dump($event->bindings);
});

Jobs / Queue

php artisan make:job --queued としていしていたのを標準化。そして、同期型Jobの作成に php artisan make:job --syncオプションを追加。

Service Provider

Illuminate\Foundation\Providers\ArtisanServiceProvider および Illuminate\Routing\ControllerServiceProviderapp.php から削除。必要時は手動追加?

Session

新しい database ドライバを追加。それにより UserID, IPAddress, User-Agent を見るようになった。今までのは legacy-database として存在するので、使用し続ける時は session.php に記述する。

新しいdatabaseドライバを使う時は、3つのレコードを sessionテーブルに追加する必要がある。

  1. user_id (nullable integer)
  2. ip_address (nullable string)
  3. user_agent (text)

設定のこと

割りとある。もれあると思う。

  1. config/app.php にあるprovidersから数行削除

    1. Illuminate\Foundation\Providers\ArtisanServiceProvider::class
    2. Illuminate\Routing\ControllerServiceProvider::class
  2. config/app.php にあるaliases から数行削除

    ソース内で使っている \Input::\Bus:: が使えなくなります。使うには、下2行を追記すればいけるかも…?

    1. 'Bus' => Illuminate\Support\Facades\Bus::class
    2. 'Input' => Illuminate\Support\Facades\Input::class
  3. auth.php の記述が変更

    'driver' => 'eloquent', と書いていたのが、Multi-Auth への対応をするために大幅変更されました。
    アップグレードして使うなら、Githubなどから持ってきたほうがいいっぽい。

  4. database path の変更

    これは 5.0→5.1の変更時に含まれてました。 see: 5.0...master diff

IronMQ のサポート

別パッケージになりました。

使うには、http://github.com/LaravelCollective/iron-queue をインストールして使うみたいです。

{{ }} とか {!! !!} とか

「{!! !!}」は非推奨とか聞いた気がするんだけど、ソースコード見たら使ってる部分ある。see

非推奨ってのはボクの勘違いだったのかしら…

Cashier

Stripe専用だけど、APIに連携していい感じにするのが追加されています。

dompdfが上手く動いてくれれば、領収書とかがPDFで吐き出せるそうです。多分。

廃止予定

5.2では使えるが、5.3では廃止予定のもの。

  1. Jobs から Illuminate\Contracts\Bus\SelfHandling が消えます
  2. Collectionlistメソッド。代わりに pluck を使用してください。
  3. 暗黙的に指定していた Route::controller はなくなります。明確に実行するメソッドを指定するようにしてください。
  4. 5.2 で言うlegacy-databaseはなくなります。
  5. Str::randomBytes は PHP7 で導入された random_bytes を使うようにしてください。
  6. Str::equalshash_equals を使うようにしてください
  7. Illuminate\View\ExpressionIlluminate\Support\HtmlString を使うようにしてください

参考

  1. http://laravel.com/docs/5.2/releases#laravel-5.2
  2. http://laravel.com/docs/5.2/upgrade
  3. Github: laravel/laravel 変更差分 5.1...5.2
  4. https://github.com/laravel/cashier
mohikanz
エンジニアのための雑談コミュニティ
https://mohikanz.slack.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした