[Laravel] 5.8.17がリリースされました
laravel/frameworkのバージョン5.8.17がリリースされました。追加された機能について確認します。
TestResponseクラスにdumpHeaders()メソッドが追加されました (#28450)
バリデーションルールにends_withが追加されました (#28455)
内部的にはIlluminate\Support\Str::endsWith()が利用されています。
$rules = [
'email' => 'required|ends_with:laravel.com,jasonmccreary.me',
];
バリデーションメッセージの追加にはresources/lang/en/validation.phpへの追記が必要です。
'ends_with' => 'The :attribute must end with one of the following: :values',
route:listコマンド実行時のcolumnsオプションに複数の値を一度に指定可能になりました (#28459)
--columnsで値を指定することで、表示するカラムの指定が可能です。
// before
php artisan route:list --columns=method --columns=uri --columns=name
// after
php artisan route:list --columns=method,uri,name
php artisan route:list --columns=method --columns=uri,name
SendQueuedMailable、SendQueuedNotificationsクラスにretryAfter()メソッドが追加されました (#28484)
Illuminate\Foundation\Console\KernelクラスにscheduleCache()メソッドが追加されました (6587e78)
スケジューリング実行時の内容をキャッシュできるようになりました。
利用するには.envファイルにてSCHEDULE_CACHE_DRIVERでキャッシュ先を指定します。
migrateコマンド実行時の--pathオプションを複数指定可能になりました (#28495)
Tappabletraitクラスが追加されました (#28507)
動作はtap()ヘルパーと同じですが、クラス内のメソッドとして利用する点で可読性がよくなります。
// without tap
$tappable = TappableClass::make();
$tappable->doSomething();
$tappable->doSomethingElse();
$result = $tappable->getResult();
// with tap method
$result = tap(TappableClass::make(), function ($tappable) {
$tappable->doSomething();
$tappable->doSomethingElse();
})->getResult();
// with Tappable trait
$result = TappableClass::make()->tap(function ($tappable) {
$tappable->doSomething();
$tappable->doSomethingElse();
})->getResult();
リスナーイベントの自動検出機能で参照されるディレクトリが指定可能になりました (#28493)
Illuminate\Foundation\Application::useAppPath()にて指定可能です。
リスナーイベントの自動検出機能はv5.8.9で追加された機能です。
Automatic Event / Listener Discovery - The Laravel Blog
パスワードリセット時のメールアドレス入力欄が自動で挿入されるようになりました (#28475)
PhpRedisConnection、PredisConnectionクラスで複数クラスターのflush dbが可能になりました (f4e8d5c)
詳しい変更については以下を確認してください。
Release v5.8.17 · laravel/framework · GitHub
[Laravel] 5.8.16がリリースされました
laravel/frameworkのバージョン5.8.16がリリースされました。追加された機能について確認します。
マイグレーション実行時のイベントが追加されました (#28342)
Illuminate\Database\Events\MigrationEnded
Illuminate\Database\Events\MigrationsEnded
Illuminate\Database\Events\MigrationStarted
Illuminate\Database\Events\MigrationsStarted
migrate:freshコマンド実行時に型を削除するオプションが追加されました (#28382)
MailMessageクラスがレンダリング可能になりました (#28386)
ブラウザでメール通知をプレビュー可能になりました。
return (new FooNotification())->toMail('[email protected]');
詳しい変更については以下を確認してください。
Release v5.8.16 · laravel/framework · GitHub
[Laravel] 5.8.15がリリースされました
laravel/frameworkのバージョン5.8.15がリリースされました。追加された機能について確認します。
データベースへの接続情報をURLで指定可能になりました (#28308, 4560d28, 05b029e)
.envファイルにDATABASE_URLとして追記できます。
(laravel/laravelのv5.8.16未満のバージョンを利用している場合は、config/database.phpへの追記が必要になります。詳しくはこちらのコミット参照)
URLベースで記載した場合には、他の設定情報は上書きされます。
// .env
DATABASE_URL=mysql://foo:bar@localhost/baz
// override database parameters
'driver' => 'mysql',
'username' => 'foo',
'password' => 'bar',
'host' => 'localhost',
'database' => 'baz',
詳しい変更については以下を確認してください。
Release v5.8.15 · laravel/framework · GitHub
[Laravel] 5.8.14がリリースされました
laravel/frameworkのバージョン5.8.14がリリースされました。追加された機能について確認します。
ジョブ単位での再試行ディレイが指定可能になりました (#28265)
ジョブ失敗時の再試行ディレイは、Worker起動時に指定してジョブ全体に適応されていましたが、各ジョブクラス毎に指定可能になりました。
クラス単位の再試行ディレイを利用するには、当該クラス内にretryAfterプロパティ、もしくはretryAfter()メソッドを実装します。
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class TestJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
// First method
public $delaySeconds = 100;
// Second method
public function delaySeconds()
{
return 200;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//
}
}
詳しい変更については以下を確認してください。
Release v5.8.14 · laravel/framework · GitHub
[Laravel] 5.8.13がリリースされました
laravel/frameworkのバージョン5.8.13がリリースされました。追加された機能について確認します。
Bladeエンジンに@errorディレクティブが追加されました (#28062)
バリデーションエラーの内容を出力する際のショートコードです。
// Before
@if ($errors->has('email'))
<span>{{ $errors->first('email') }}</span>
@endif
// After:
@error('email')
<span>{{ $message }}</span>
@enderror
スキーマビルダーで独自のDoctrine DBALタイプを登録する機能を追加しました (#28238, 91a6afe)
詳しい変更については以下を確認してください。
Release v5.8.13 · laravel/framework · GitHub
[Laravel] 5.8.12がリリースされました
laravel/frameworkのバージョン5.8.12がリリースされました。追加された機能について確認します。
Illuminate\Support\Collectionクラスにduplicates()メソッドが追加されました (#28181)
コレクションから重複した値を取得することができます。
$duplicates = Collection::make([1, 2, 1, 'laravel', null, 'laravel', 'php', null])->duplicates()->all();
// [2 => 1, 5 => 'laravel', 7 => null]
$duplicatesWithKey = Collection::make($items)->duplicates('framework')->all();
// [2 => 'laravel']
Illuminate\Database\Eloquent\Collectionクラスにduplicates()メソッドが追加されました (#28194)
コレクションから重複したモデルを取得することができます。
$one = new TestEloquentCollectionModel();
$two = new TestEloquentCollectionModel();
$three = new TestEloquentCollectionModel();
$four = new TestEloquentCollectionModel();
$one->id = 1;
$one->someAttribute = '1';
$two->id = 1;
$two->someAttribute = '2';
$three->id = 1;
$three->someAttribute = '3';
$four->id = 2;
$four->someAttribute = '4';
$duplicates = Collection::make([$one, $two, $three, $four])->duplicates()->all();
// [1 => $two, 2 => $three]
Illuminate\View\FileViewFinderクラスにgetViews()メソッドが追加されました (#28198)
登録されているviewの情報を取得できます。
Illuminate\Console\Scheduling\Eventクラスに複数のメソッドが追加されました (#28167)
以下のメソッドが追加されました。
onSuccess()
onFailure()
pingOnSuccess()
pingOnFailure()
emailOnFailure()
スケジューリングされたコマンド実行時にこのメソッドを利用して、コマンドの実行結果に応じた処理をチェインすることができます。
protected function schedule(Schedule $schedule)
{
$schedule->command('my:command')
->onSuccess(function () {
// do something when scheduled command ran successfully
})
->onFailure(function () {
// do something when scheduled command failed
})
->pingOnSuccess('https://example.com')
->pingOnFailure('https://example.com')
->emailOnFailure('[email protected]')
;
}
MySQL GrammarにSETタイプが追加されました (#28171)
SETタイプについてはこちらを確認してください。
QueryBuilderクラスのwhere()メソッドのオペレータにin、not inが指定可能になりました (#28192)
whereIn()やwhereNotIn()メソッドと同様の処理が行われます。
// these two calls produce the same query
$query->where('foo', 'in', [1, 2]);
$query->whereIn('foo', [1, 2]);
// these two calls produce the same query
$query->where('foo', 'not in', [1, 2]);
$query->whereNotIn('foo', [1, 2]);
詳しい変更については以下を確認してください。
Release v5.8.12 · laravel/framework · GitHub
[Laravel] 5.8.11がリリースされました
laravel/frameworkのバージョン5.8.11がリリースされました。追加された機能について確認します。
lluminate\Support\Facades\DateクラスからMacroableなメソッドを直接実行可能になりました (#28129)
Macroableの機能を利用した関数を、staticな関数のように実行することができるようになりました。
Date::macro('returnNonDate', function () {
return 'string';
});
$this->assertSame('string', Date::returnNonDate());
Filesystemsクラスでローカルのディスクを利用する場合にファイルロックの利用をカスタマイズできるようになりました (#28124)
以下のようにconfig/filesystems.phpでlockパラメーターを指定することでカスタマイズ可能です。
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
'lock' => 0,
],
Filesystemsについてさらに詳しく知りたい場合はこちらを確認してください。
Illuminate\Console\Scheduling\Eventがコマンドの終了コードを保存するようになりました (#28140)
この機能の追加により、スケジューリングに指定したコマンドのテストが可能になりました。
LaravelでのスケジューリングにはApp\ConsoleKernelクラスのschedule()メソッドで行うことが推奨されています。
このメソッド内で$schedule->command()等を用いてコマンドを実行する場合には、内部的にはIlluminate\Console\Scheduling\Eventとして処理されています。
Illuminate\Console\Scheduling\EventにはMacroableトレイトが利用可能なので、Macroableを利用した独自のメソッドの追加などによりコマンド実行時の終了コードを確認できます。
詳しい変更については以下を確認してください。
Release v5.8.11 · laravel/framework · GitHub
[Laravel] 5.8.10がリリースされました
laravel/frameworkのバージョン5.8.10がリリースされました。追加された機能について確認します。
モデルイベントにreplicatingが追加されました (#28077)
$model->replicate()メソッド実行時にイベントが発火されます。
既存のイベントと同じように、boot()メソッドやObserverでの指定が可能です。
NotificationFakeクラスでMacroableが利用可能になりました (#28091)
詳しい変更については以下を確認してください。
Release v5.8.10 · laravel/framework · GitHub
[Laravel] 5.8.9がリリースされました
laravel/frameworkのバージョン5.8.9がリリースされました。追加された機能について確認します。
リスナーイベントの自動検出機能が追加されました (#28064, #28085)
イベントとリスナーの紐付けを行うにはサービプロバイダー内で明示的に定義する必要がありましたが、これを自動検出可能になりました。
自動検出を利用するにはshouldDiscoverEvents()メソッドがtrueを返す必要があります。(デフォルトはfalseです)
app/Providers/EventServiceProvider.php:
/**
* Determine if events and listeners should be automatically discovered.
*
* @return bool
*/
public function shouldDiscoverEvents()
{
return true;
}
自動検出機能を利用する場合には、フレームワークはapp/Listeners内のクラスをスキャンし、対応するイベントのpublicなhandle()メソッドおよびhandleから始まるメソッドを検出します。
その後、これらのパラメータとメソッドを調べてリスナーがどのイベントを処理しているのかを判断することで、EventServiceProviderで現在構成されている手動で構築された配列と基本的に同じイベント/リスナーの配列を構築します。
最後に、明示的に定義されたイベントを検出されたイベントの上にマージし、すべてをDispatcherに登録します。
自動検出が有効になっている場合、検出されたイベントは2つの方法でロードされます。
1. event:cacheコマンドによって生成されたキャッシュファイルからの読み込み
フレームワークがイベントキャッシュファイルを見つけると、イベント/リスナーの設定はそのファイルからロードされます。
EventServiceProviderで明示的に定義されたイベント/リスナーも登録されます。
2. 実行時に毎回自動検出を実行する
イベントキャッシュファイルが見つからない場合は、リクエスト中にイベント/リスナーがその場で検出されます。
余計な処理が増えるため、これはプロダクションにはお勧めできません。
Automatic Event / Listener Discovery - The Laravel Blog
また、自動検出機能の恩恵による登録されたイベント/リスナーの一覧を表示するevent:listコマンドも追加されました。
詳しい変更については以下を確認してください。
Release v5.8.9 · laravel/framework · GitHub
[Laravel] 5.8.8がリリースされました
laravel/frameworkのバージョン5.8.8がリリースされました。追加された機能について確認します。
Illuminate\Database\Query\BuilderクラスにforPageBeforeId()メソッドが追加されました (#28011)
指定したレコードより前に作成されたレコードを取得できます。
// 指定したid以前の10件を取得
$beforePages = Model::forPageBeforeId(10, $focus->id);
// 指定した日付以前の20件を取得
$beforePages = Model::forPageBeforeId(20, $focus->created_at, 'created_at');
また、以前からBuilderクラスにはforPageAfterId()メソッドが存在しており、特定のレコードに対する前後のレコードの取得も可能です。
$posts = new Collection;
$posts = $posts->concat(ChatPost::forPageBeforeId(15, $focused->id)->get()->reverse());
$posts = $posts->push($focused);
$posts = $posts->concat(ChatPost::forPageAfterId(15, $focused->id)->get());
// -> ChatPost 202
// -> ChatPost 203
// -> ChatPost 204
// => ChatPost 205 < focused post
// -> ChatPost 206
// -> ChatPost 207
// -> ChatPost 208
詳しい変更については以下を確認してください。
Release v5.8.8 · laravel/framework · GitHub