おめでとうございます。
いくつか新機能と、変更点があるので、それの私的なメモ書き。
追記
- 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 ルールの追加
よくわからない。「パラメータでは渡されているけど空白」もしくは「パラメータがない」のどっちなんだろ。
