おめでとうございます。
いくつか新機能と、変更点があるので、それの私的なメモ書き。
追記
- 2016/12/14: Notification に 5.1, 5.2 系で使うには を追加
新機能
新機能が、5.2に上がった時よりも多い気がする…
全文検索
Eloquent で全文検索ができるようになったみたいです。試してないから、細かい所まではわからない。
Post::search('Alice')->get();
laravel-scoutを使用してます。
Scoutは標準で Algolia を利用しています。AlgoliaはKV的なWebAPIサービスなので、利用するために初めはAlgolia
へデータ登録をする必要があります。詳しくは Scout に書いてるっぽい。
他にも jeylabs/laravel-scout-elastic で ElasticSearch
で利用できるみたい。
Laravel Passport
OAuth2のサーバ側を簡単に導入できるようにしたパッケージ「Laravel Passport」が標準ではいったっぽい。
これの機能を実装するために Vue.js が標準導入。
Laravel Mailable
5.2系ではゴリゴリ書いてたのが、5.3ではクラスベースにできます。これですっきりできる。
// 5.2 base
Mail::send('emails.reminder', ['user' => $user], function ($m) use ($user) {
$m->from('hello@app.com', 'Your Application');
$m->to($user->email, $user->name)->subject('Your Reminder!');
});
コマンドでmailable
クラスを作成して、そこに色々書く感じ。
php artisan make:mail YourReminder
// メソッド
public function build()
{
return $this->from('example@example.com')
->view('emails.reminder');
}
// 使う時はこんな感じ
Mail::to($email)->send(new YourReminder);
see: Laravel Mailable: The new and improved way to send email in Laravel
Notification
やっとか。
サーバからの通知を、Slack/TextMessage(SNS?)/Emailとかに飛ばす為のコンポーネント。パッケージが完全に分離されているので、5.1/5.2系に導入可能。
Notification で通知できるサービス
公式で書いている限り。自分で書いたら他にも行けるんじゃない。
- Push系
- Ionic Push Notifications
- OneSignal
- Pushover
- PushBullet
- Pusher Push Notifications
- WebPush
- メッセンジャー系
- Discord
- Gitter
- Telegram
- HipChat
- SNS系
- Clickatell
- Jusibe
- Messagebird
- OVH SMS
- Plivo
- Smsc.ru
- Twilio
- Todo系
- Evernote
- Todoist
- Wunderlist
- その他
- Lob Physical Mail
- MailLift Handwritten Letters
- Trello
- Webhook
Webhookがあるのでiftttに飛ばせますね。
see: Laravel Notification Channels
5.1, 5.2 系で使うには
backPort をインストールすればいいよ。
Laravel Echo
tcp/udp の 7番ポートで喋るやつではありません。
websocket で喋り続けるやつです。
Migration
既存の migrate:rollback
では一つ前のバージョンに戻すが、戻すバージョンを数値で指定することができるようになった。
php artisan migrate:rollback --step=1
Simple Pagination
いままでの Pagination
より簡素になったっぽい。よくわからない。
Blade Loop Variable
Blade に LoopCounter が入った話。
<ul>
@foreach ($pages as $page)
<li>{{ $page->title }} ({{ $loop->iteration }} / {{ $loop->count }})</li>
@endforeach
</ul>
see: The new $loop variable in Laravel 5.3
Directory Changes
app
フォルダーにあった空のディレクトリが削除されました。例えば Events
,Jobs
,Listeners
,Policies
など。make:job
などを実行すれば、必要に応じて作成されます。
Queued Jobs
Eloquent Collection
のシリアライズ化が新しくなったみたいです。よくわからない。
Query Builder
配列で返していたのをCollection
で返すようになりました。
\DB::select('select * from
hoge_table')->get()
の返り値がObject[]
だったのがCollection
になったという事?
Cache Helper
cache()
関数が追加。
see: (The new cache() global helper in Laravel 5.3)[https://mattstauffer.co/blog/the-new-cache-global-helper-in-laravel-5-3]
Documentation Changes
改善されたよってことらしい。よくわからん。
アップグレード
- PHP5.6.4以上を推奨。
- HHVMのサポートは遠くないうちにきれます。
- 5.2アップグレードガイドは5.3では不要になる事に注意。
Application Service Providers
EventServiceProvider
や RouteServiceProvider
の boot
メソッドの引数を使うより、facade
を使ったほうがいいかも。
Arr クラス
PHP の連想配列に対応したので、first
,last
,where
メソッドのClosureに添字の $key が追加された。
Arr::first(function ($value, $key) {
return ! is_null($value);
});
Collections
同様の変更がある。
Artisan
make:console
がmake:command
に変更されます。
Authentication
認証まわりが 4つのコントローラクラスに変更されましたので、Route
で指定している場合は Auth::routes()
や コントローラ名などを置換するようにしてください。
(AuthController を置いておいて、メソッドの中からapp(Controller::class)->hoge($args..)
をすればこの変更はあまりなかったように思うけどまぁいいや)
ログアウト
logout
メソッドが post
routes でも動くみたいな感じ。
パスワードリセットメール
Laravel-Notification が使われます。
Illuminate\Auth\Passwords\CanResetPassword
トレイトのsendPasswordResetNotification
メソッドを上書きすれば、書き換えることができます。
既存のままで、Laravel-Notificationを使用する場合は下記のような感じになります。
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
}
認可
認証しているユーザのmodelを引数で取ることができるようになりました。
/**
* Determine if the given user can create posts.
*
* @param \App\User $user
* @return bool
*/
public function create(User $user)
{
//
}
AuthorizesResourcesの変更
app/Http/Controllers/Controller.php
にあるAuthorizesResources
がAuthorizesResources
に変更されました。
Blade
力尽きた
Database
Collections
all
メソッドを呼ぶにはget
メソッドを呼び出してからにする変更があったっぽい。
$users = DB::table('users')->get()->all();
Eloquent $morphClass Property
力尽きた。
Eloquent save
method return false
Eloquentモデルの内容に変更がない場合、返り値がfalse
になります。
Eloquent Scopes
力尽きた。
Join Clause
力尽きた。
Encryption
Mcrypt
が5.1.0から使いませんが、5.3.0から完全になくなり、全て OpenSSL に置き換わります。
DBにMcrypt
を使ったデータを保存している場合、laravel/legacy-encrypterを使って、下記のようなコマンドを作成して、DBの内容を更新をしてください。
$legacy = new McryptEncrypter($encryptionKey);
foreach ($records as $record) {
$record->encrypted = encrypt(
$legacy->decrypt($record->encrypted)
);
$record->save();
}
例外ハンドラー
Illuminate\Container\Container
インスタンスを使うようになりました。app/Exception/Handler.php
でコンストラクターを利用している場合、parent::__construct(app());
を呼び出してください。
Middleware
can
ミドルウェアが \Illuminate\Foundation\Http\Middleware\Authorize::class
から \Illuminate\Auth\Middleware\Authorize::class
に変更されましたので、変更をしてください。
そして can
ミドルウェアで、認証していないユーザの例外が Illuminate\Auth\AuthenticationException
になりました。ユーザが認証していない時の例外を捉えるには Illuminate\Auth\AuthenticationException
を取るようにしてください。
Binding Substitution Middleware
力尽きた。
Notification
パッケージインストールをしてください。
-
config/app.php
のproviders
にIlluminate\Notifications\NotificationServiceProvider
を追加してください。 -
config/app.php
のaliases
にIlluminate\Support\Facades\Notification
を追加してください。 -
User
モデルにIlluminate\Notifications\Notifiable
トレイトを使うようにしてください。必要に応じて、他のモデルにも追加してください。
Pagination
カスタマイズする時は下記の手順で、元テンプレートを編集してください。
php artisan vendor:publish --tag=laravel-pagination
コマンドを実行すれば、 resources/views/vendor/pagination
が作成されます。default.blade.php
がベーステンプレートになります。詳しくは Customizing The Pagination Viewを参照
Queue
設定の変更
全てのQueueの設定にある expire
が retry_after
という名前に変更されました。
同様に、Beanstalk の設定にある ttr
が retry_after
になりました。
Closures
そう遠くない間に使えなくなります。Closureからクラスと Queue インスタンスで動くように書き換えてください。
Collection Serialization
Illuminate\Queue\SerializesModels
トレイトが Illuminate\Database\Eloquent\Collection
のインスタンスを適切にシリアライズするようになりました。
これの変更による膨大な量の書き換えは起こらないはずです。
Daemon Workers
queue:work
のオプション引数 --daemon
が必要にならなくなるでしょう。
php artisan queue:work
で起動されるプロセスは、自動的に Daemon Mode になります。
シングルジョブとして動かしたい場合は --once
オプションを追加してください。
Event Data Changes
よくわからない。
Jobs Table
database
を使用している場合、jobs
テーブルから jobs_queue_reserved_reserved_at_index
インデックスと、reserved
カラムを削除してください。このカラムはこれから使用しません。
それらの変更をしたら、queue
カラムとreserved_at
カラムをもつ複合インデックスを作成してください。
Failed Jobs Table
failed_jobs
を使用している場合、exception
カラムを追加してください。
exception
カラムは TEXT
タイプで、Jobの実行が失敗した時の例外を保存するのに使用します。
Serializing Models On Legacy Style Queue Jobs
Queue:push
の引数が変わりました。
従来では Queue::push('ClassName@method');
でしたが、Job class
にIlluminate\Queue\SerializesModels
トレイトを利用させて、Queue::push(new ClassName);
という方法を取ってくださいみたいな感じ。
Routing
Resource Parameters Are Singular By Default とある。力尽きた。
Validation
Validationエラーで発生する例外が HttpException
を継承した Illuminate\Validation\ValidationException
になった。
例外を受け取っている場合は ValidationException
を受け取るようにしてください。
Nullable ルールの追加
よくわからない。「パラメータでは渡されているけど空白」もしくは「パラメータがない」のどっちなんだろ。