[Laravel] 5.7がリリースされました
laravel/frameworkのバージョン5.7がリリースされました。更新された機能について確認していきます。
Laravel 5.7では以下の用な更新が行われています。
- Laravel Novaへの対応
- ユーザーのメールアドレスの検証機能の追加
- GateやPolicyといった認証に関わる部分でのゲストユーザをサポートする機能の追加
- Artisanコマンドのテスト方法の改善
- Symfonyを使用したDump Serverの統合
- Notificationのローカライズ対応
- その他のバグの修正、およびユーザビリティの向上
メールアドレスの検証
Laravel 5.7では、フレームワークに含まれている認証用テンプレートにオプションのメールアドレスの検証
が追加されました。
この機能に対応するために、フレームワークに含まれているデフォルトのユーザーテーブルのmigrationにemail_verified_at
タイムスタンプ列が追加されています。
新しく登録したユーザーにメールアドレスの検証
を促すには、User
モデルにMustVerifyEmail
インターフェイスを設定する必要があります。
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements MustVerifyEmail
{
// ...
}
User
モデルにMustVerifyEmail
インターフェイスが設定されると、新しく登録されたユーザーには、署名付きの確認リンクが記載されたメールが送信されます。
このリンクがクリックされると、Laravelは検証時間を自動的にデータベースに記録します。
verified
ミドルウェアがデフォルトのアプリケーションのHTTPカーネルに追加されました。このミドルウェアは、検証されたユーザーのみを許可することができます。
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
詳細についてはこちらをご確認ください
ゲストユーザーのGate/Policy
Laravelの以前のバージョンでは、未認証GateとPolicyはアプリケーションが自動的にfalse
を返しました。ただしOptional型のタイプヒンティング
を宣言するか、null
のデフォルト値を指定することで、ゲストが認可を通過できるようになりました。
Gate::define('update-post', function (?User $user, Post $post) {
// ...
});
Symfony Dump Server
Laravel 5.7は、 beyondcode/laravel-dump-serveのパッケージを使用してSymfonyのDump Serverと統合されました。利用するには、Artisanコマンドのdump-server
を実行します。
php artisan dump-server
Dump Serverが起動すると、ダンプするすべての呼び出しは、ブラウザーではなくコンソール・ウィンドウに表示され、HTTP応答出力をマ待つこと無く値を検査することができます。
Notificationのローカリゼーション
Laravelでは、現在の言語以外のロケールで通知を送信できるようになり、通知がキューに送る場合でもこのロケールを指定可能です。
これを実現するために、Illuminate\Notifications\Notification
クラスは、目的の言語を設定するためのlocale()
メソッドが追加されました。通知がフォーマットされると、アプリケーションはこのロケールに変更され、フォーマットが完了すると以前のロケールに戻ります。
$user->notify((new InvoicePaid($invoice))->locale('es'));
複数の通知エントリのローカライズは、Notification
ファサードを介して行うこともできます。
Notification::locale('es')->send($users, new InvoicePaid($invoice));
Artisanコマンドのテスト
Laravel 5.7では、expectsQuestion
メソッドを使用してArtisanコマンドのユーザー入力を簡単にモック化できます。
また、assertExitCode
およびexpectsOutput
メソッドを使用して、Artisanコマンドによって出力されると予想される終了コードおよびテキストを指定することもできます。
たとえば、次のArtisanコマンドを例にします。
Artisan::command('question', function () {
$name = $this->ask('What is your name?');
$language = $this->choice('Which language do you program in?', [
'PHP',
'Ruby',
'Python',
]);
$this->line('Your name is '.$name.' and you program in '.$language.'.');
});
expectsQuestion
、expectsOutput
、およびassertExitCode
メソッドを使用する次のテストでこのコマンドをテストできます。
/**
* Test a console command.
*
* @return void
*/
public function test_console_command()
{
$this->artisan('laracon')
->expectsQuestion('What is your name?', 'Taylor Otwell')
->expectsQuestion('Which language do you program in?', 'PHP')
->expectsOutput('Your name is Taylor Otwell and you program in PHP.')
->assertExitCode(0);
}
URL Generatorがコールバックに対応しました
LaravelのURLジェネレータは、文字列を受け入れるだけでなく、コントローラアクションのURLを生成する際に、callable
な構文を受け入れるようになりました。
action([UserController::class, 'index']);
Paginator Links
Laravel 5.7では、ページネーションの両側に表示されるリンクの数を制御できます。
デフォルトでは、プライマリページリンクの各サイドに3つのリンクが表示されます。
ただし、onEachSide
メソッドを使用してこの数を制御できます。
{{ $paginator->onEachSide(5)->links() }}
Filesystem Read / Write Streams
LaravelのFlysystemで、readStream
メソッドとwriteStream
メソッドが利用可能になりました。
Storage::disk('s3')->writeStream(
'remote-file.zip',
Storage::disk('local')->readStream('local-file.zip')
);
詳しい内容については以下を確認してください。
Release Notes - Laravel - The PHP Framework For Web Artisans