LoginSignup
54
53

More than 3 years have passed since last update.

Laravel 5.2 追加機能とかメモ

Last updated at Posted at 2015-12-22

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
54
53
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
53