LoginSignup
46
39

More than 3 years have passed since last update.

Laravel5.3 Release と、 5.2 からの変更点の、わりと力尽きているメモ書き

Last updated at Posted at 2016-08-24

おめでとうございます。

Laravel 5.3 is now released

いくつか新機能と、変更点があるので、それの私的なメモ書き。

追記

  1. 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-elasticElasticSearch で利用できるみたい。

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
    • Facebook
    • Gitter
    • Twitter
    • 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 * fromhoge_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

EventServiceProviderRouteServiceProviderboot メソッドの引数を使うより、facadeを使ったほうがいいかも。

Arr クラス

PHP の連想配列に対応したので、first,last,whereメソッドのClosureに添字の $key が追加された。

Arr::first(function ($value, $key) {
    return ! is_null($value);
});

Collections

同様の変更がある。

Artisan

make:consolemake: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にあるAuthorizesResourcesAuthorizesResourcesに変更されました。

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.phpprovidersIlluminate\Notifications\NotificationServiceProviderを追加してください。
  • config/app.phpaliasesIlluminate\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の設定にある expireretry_afterという名前に変更されました。
同様に、Beanstalk の設定にある ttrretry_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 classIlluminate\Queue\SerializesModelsトレイトを利用させて、Queue::push(new ClassName);という方法を取ってくださいみたいな感じ。

Routing

Resource Parameters Are Singular By Default とある。力尽きた。

Validation

Validationエラーで発生する例外が HttpException を継承した Illuminate\Validation\ValidationException になった。

例外を受け取っている場合は ValidationException を受け取るようにしてください。

Nullable ルールの追加

よくわからない。「パラメータでは渡されているけど空白」もしくは「パラメータがない」のどっちなんだろ。

参考

  1. Github Diff between 5.2 and 5.3
46
39
5

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
46
39