Laravel 5.2 が出たので、変更箇所とかぼんやり眺める系メモ
追記 -- 2016/01/29
- 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 からモデルを引っ張ってこれるようになった。
<?php
use App\User;
Route::get('/user/{user}', function (User $user) {
return $user;
});
{user}
はタイプヒンティングで Eloquent Model から自動的に引っ張ってくる。
Middleware Group
ミドルウェアをグループ化することで、今ではRouteで複数指定しているのを、短くすることができる。
/**
* 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',
],
];
<?php
Route::group(['middleware' => ['web']], function () {
//
});
Rate Limitting
新しい標準のMiddlewareに、IPアドレスからのリクエスト制限をするMiddlewareが追加。
下記の例だと、1つのIPから毎分60リクエストを上限にする。
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\ControllerServiceProvider
を app.php
から削除。必要時は手動追加?
Session
新しい database
ドライバを追加。それにより UserID, IPAddress, User-Agent を見るようになった。今までのは legacy-database
として存在するので、使用し続ける時は session.php
に記述する。
新しいdatabase
ドライバを使う時は、3つのレコードを sessionテーブルに追加する必要がある。
user_id (nullable integer)
ip_address (nullable string)
user_agent (text)
設定のこと
割りとある。もれあると思う。
-
config/app.php
にあるproviders
から数行削除- Illuminate\Foundation\Providers\ArtisanServiceProvider::class
- Illuminate\Routing\ControllerServiceProvider::class
-
config/app.php
にあるaliases
から数行削除ソース内で使っている
\Input::
や\Bus::
が使えなくなります。使うには、下2行を追記すればいけるかも…?- 'Bus' => Illuminate\Support\Facades\Bus::class
- 'Input' => Illuminate\Support\Facades\Input::class
-
auth.php の記述が変更
'driver' => 'eloquent',
と書いていたのが、Multi-Auth への対応をするために大幅変更されました。
アップグレードして使うなら、Githubなどから持ってきたほうがいいっぽい。 -
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では廃止予定のもの。
- Jobs から
Illuminate\Contracts\Bus\SelfHandling
が消えます -
Collection
のlist
メソッド。代わりにpluck
を使用してください。 - 暗黙的に指定していた
Route::controller
はなくなります。明確に実行するメソッドを指定するようにしてください。 - 5.2 で言う
legacy-database
はなくなります。 -
Str::randomBytes
は PHP7 で導入されたrandom_bytes
を使うようにしてください。 -
Str::equals
はhash_equals
を使うようにしてください -
Illuminate\View\Expression
はIlluminate\Support\HtmlString
を使うようにしてください