[Laravel] 5.8.30がリリースされました
laravel/frameworkのバージョン5.8.30がリリースされました。追加された機能について確認します。
MakesHttpRequestsクラスにoption()と、optionJson()メソッドが追加されました (#29258)
テスト時にOPTIONリクエストを検証するメソッドです。
通常のページへのレスポンス検証時にはoption()メソッドを使い、API等のレスポンス検証時にはoptionJson()メソッドを利用します。
$this->option('/example');
$this->optionJson('/api/example');
BlueprintクラスにuuidMorphs()と、nullableUuidMorphs()メソドが追加されました (#29289)
マイグレーションファイルでuuidを外部キーとしたMorphリレーションを作成できるようになりました。
作成されるスキーマはmorphs()メソッドやnullableMorphs()と同様に、引数で指定した値に対応する2種類のカラムとインデックスが作成されます。
$table->uuidMorphs('taggable');
/**
* Add the proper columns for a polymorphic table using UUIDs.
*
* @param string $name
* @param string|null $indexName
* @return void
*/
public function uuidMorphs($name, $indexName = null)
{
$this->string("{$name}_type");
$this->uuid("{$name}_id");
$this->index(["{$name}_type", "{$name}_id"], $indexName);
}
MailgunTransportクラスにgetEndpoint()と、setEndpoint()メソッドが追加されました (#29312)
メールの送信サービスにMailgunを利用している場合にエンドポイントの切り替えが可能になりました。
ドメインの切り替えは既に実装されていましたが、ドメインによってエンドポイントが異なる場合でも対応可能になりました。
$mailTransport = app()->make('mailer')->getSwiftMailer()->getTransport();
$mailTransport->setDomain('yourdomain.com');
$mailTransport->setEndpoint('api.eu.mailgun.net');
画像に関するバリデーションルールにWEBPが追加されました (#29309)
TestResponse::assertSessionHasInput()メソッドが追加されました (#29327)
Bladeテンプレートの場合、前回のリクエストの値はold()メソッドを利用して取得しますが、この値は_old_inputという名前でセッション上に保存されています。
テスト時に前回のリクエストの内容を検証したい場合に便利になりました。
// Before
$response->assertSessionHas('_old_input', [
'connection_id' => $connection->id,
'repository' => $repository,
'source_branch' => $branch,
]);
// After
$response->assertSessionHasInput([
'connection_id' => $connection->id,
'repository' => $repository,
'source_branch' => $branch,
]);
カスタマイズしたRedisドライバーが利用できるようになりました (#29275)
PostgresでのCollationに対応しました (#29213)
詳しい変更については以下を確認してください。
Release v5.8.30 · laravel/framework · GitHub
[Laravel] 5.8.29がリリースされました
laravel/frameworkのバージョン5.8.29がリリースされました。追加された機能について確認します。
WithFaker::makeFaker()メソッドにapp.faker_localeのロケールが指定されるようになりました (#29123)
テスト時に利用する\Illuminate\Foundation\Testing\WithFakeが、config/app.php内に指定可能なfaker_localeを参照するようになりました。
Notificationをメールで行う際にデザインテーマを指定可能になりました (#29132)
MailMessageクラスを利用してMarkDown形式でのメール送信の際のデザインテーマをカスタマイズできるようになりました。
デフォルトで使用するdefault.cssを上書きすること無くオリジナルのcssファイルを指定できます。
オリジナルのcssファイルはresources/views/vendor/mail/html/themes以下に配置する必要があります。
public function toMail($notifiable)
{
$url = url('/invoice/'.$this->invoice->id);
return (new MailMessage)
->theme('notification')
->greeting('Hello!')
->line('One of your invoices has been paid!')
->action('View Invoice', $url)
->line('Thank you for using our application!');
}
migration実行時の処理時間がコンソールに出力されるようになりました (#29149)
Illuminate\Database\Query\BuilderクラスのwhereNull()およびwhereNotNull()メソッドの引数に配列を指定可能になりました (#29154)
複数のカラムに対してNull判定を行う際にまとめて指定できるようになりました。
// Before
$query->whereNull('id')->whereNull('expires_at');
$query->whereNotNull('id')->whereNotNull('expires_at');
// After
$query->whereNull(['id', 'expires_at']);
$query->whereNotNull(['id', 'expires_at']);
Console\Scheduling\ManagesFrequencies::hourlyAt()メソッドの引数に配列を指定可能になりました (#29173)
毎時のスケジューリングを設定する際にまとめて指定できるようになりました。
// Before
$schedule->command('my:command')->hourlyAt(15)->hourlyAt(30)->hourlyAt(45)
// After
$schedule->command(my:command')->hourlyAt([15, 30, 45]);
詳しい変更については以下を確認してください。
Release v5.8.29 · laravel/framework · GitHub
[Laravel] 5.8.28がリリースされました
laravel/frameworkのバージョン5.8.28がリリースされました。追加された機能について確認します。
TestResponseクラスにTappableトレイトが追加されました (#29033)
CollectionクラスにmergeRecursive()メソッドが追加されました (#29084)
PHPネイティブのarray_merge_recursive()を使って新しいコレクションを作成します。
Collectionクラスにreplace()、replaceRecursive()メソッドが追加されました (#29088)
PHPネイティブのarray_replace()、array_replace_recursive()を使って新しいコレクションを作成します。
Session\Storeクラスにonly()メソッドが追加されました (#29107)
SESSION情報から指定したキーの値を配列で取得します。
$session->only(['key1', 'key2']);
詳しい変更については以下を確認してください。
Release v5.8.28 · laravel/framework · GitHub
[Laravel] 5.8.27がリリースされました
laravel/frameworkのバージョン5.8.27がリリースされました。追加された機能について確認します。
mix()ヘルパーでアセットのURLが変更できるようになりました (#28952)
以前のアップデートでapp.asset_urlを指定することでCDNを利用したファイルの配信が可能になりましたが、同様にLaravel MixでビルドしたファイルについてもCDN等からの配信が可能になりました。
有効にする場合はconfig/app.phpにてmix_urlキーでURLを指定します。
RedisManager::setDriver()メソッドが追加されました (#28985)
プログラムの実行中にredisのドライバーを変更する必要がある場合にこのメソッドを利用できます。
MorphToリレーションを操作可能なwhereHasMorph()メソッドが追加されました (#28928)
MorphTo関係にあるモデルに対してもwhereHasMorph()を利用して追加のクエリを発行できるようになりました。
今までは関連するデータに対して追加のクエリを発行するwhereHas()はMorphToリレーションについては利用できませんでしたが、この問題が解消されました。
対象となるモデルを引数に与え、コールバックを利用してクエリを発行できます。
Relation::morphMap(['posts' => Post::class]);
Comment::whereHasMorph('commentable', [Post::class, Video::class], function ($query) {
$query->where('title', 'foo');
})->get();
また、それぞれのモデルに対して別の処理を行いたい場合には以下のように使用します。
Relation::morphMap(['posts' => Post::class]);
Comment::whereHasMorph('commentable', [Post::class, Video::class], function ($query, $type) {
if ($type === Post::class) {
$query->where('title', 'foo');
}
if ($type === Video::class) {
$query->where('title', 'bar');
}
})->get();
詳しい変更については以下を確認してください。
Release v5.8.27 · laravel/framework · GitHub
[Laravel] 5.8.25がリリースされました
laravel/frameworkのバージョン5.8.25がリリースされました。追加された機能について確認します。
route:listコマンドにjsonオプションが追加されました (#28894)
存在するルートの情報がjosn形式で出力可能になりました。
ルート情報を他のアプリケーションと共有したい場合などに活用できそうです。
php artisan route:list --json
詳しい変更については以下を確認してください。
Release v5.8.25 · laravel/framework · GitHub
[Laravel] 5.8.24がリリースされました
laravel/frameworkのバージョン5.8.24がリリースされました。追加された機能について確認します。
TestResponse::assertSessionHas()メソッドでクロージャを使用してセッションに特定のデータが含まれていることを確認できるようになりました (#28837)
使い方はTestResponse::assertViewHas()メソッドと同様に、クロージャーの中で指定したキーが持つセッションの値を評価します。
// Before
$response->assertSessionHas('authenticatable');
$this->assertTrue($user->is(session('authenticatable')));
// After
$response->assertSessionHas('authenticatable', function ($authenticatable) use ($user) {
return $user->is($authenticatable);
});
TestResponse::assertUnauthorized()メソッドが追加されました (#28851)
既存のassertNotFound()やassertForbidden()と同様に、レスポンスのステータスコードが401(Unauthorized)なことを確認するメソッドです。
環境設定のSERVER_PORTでビルドインサーバーのポートが指定可能になりました (#28849, 6a18e73)
LaravelにはPHPのビルドインサーバーを起動するphp artisan serveコマンドがあります。
デフォルトの8000以外のポートを使いたい場合には--portオプションでの指定が必要でしたが、.envファイルのSERVER_PORTでポートの指定が可能になりました。
Artisanコマンドの引数に渡す環境オプション(--env)をスペースで区切れるようになりました (#28869)
// Before
php artisan --env=dev {command}
// After
php artisan --env dev {command}
@endcomponentFirstディレクティブが追加されました (#28884)
retry()ヘルパーでクロージャーを利用して再実行の判定を追加できるようになりました (85c0801)
繰り返しの回数を指定する1つ目のパラメーターに加えて、クロージャーで繰り返しの判定が可能な4つ目の引数が追加されました。
クロージャーのパラメーターには発生した例外が渡されます。
詳しい変更については以下を確認してください。
Release v5.8.24 · laravel/framework · GitHub
[Laravel] 5.8.22がリリースされました
laravel/frameworkのバージョン5.8.22がリリースされました。追加された機能について確認します。
Bladeテンプレートに@componentFirstディレクティブが追加されました (#28783)
Bladeのディレクティブには@componentと@includeという似たような機能を持つディレクティブがあります。
@componentsは@slotsを通してデータを渡すことができます
@componentは渡された変数にのみアクセスしますが、@includeは現在定義されているすべての変数にアクセスします。
これらのディレクティブは非常に似ていますが、@includeには便利なバリエーションがあります。
@includeWhen
@includeIf
@includeFirst
@componentFirstを利用することで、@componentの利点を活かしつつ、上記のようなバリエーションを利用できるようになりました。
<div>
@componentFirst(['missing/file', 'found/file'])
@slot('title', 'Test Component')
@endcomponent
</div>
Morphリレーション関係にあるモデルのネスとしたリレーションをEager Loadingで取得可能になりました (#28647, d72e3cd)
Commentは、VideoまたはPostとMorph関係にあります
PostはUserと関係があります
Comment::query()
->with(['commentable' => function (MorphTo $morphTo) {
$morphTo->morphWith(Post::class, ['user']);
}])
->get();
PluralizerクラスにRelatedとRecommendedが追加されました (#28749)
Str::containsAll()メソッドが追加されました (#28806)
文字列が引数で与えられた配列の値を全て含んでいることを確認できます。
$this->assertTrue(Str::containsAll('taylor otwell', ['taylor', 'otwell']));
$this->assertTrue(Str::containsAll('taylor otwell', 'taylor'));
$this->assertTrue(Str::containsAll('taylor otwell', ['taylor']));
$this->assertFalse(Str::containsAll('taylor otwell', 'xxx'));
$this->assertFalse(Str::containsAll('taylor otwell', ['taylor', 'xxx']));
メンテナンスモードコマンドのエラー処理が追加されました (#28765, 9e20849)
Laravelでメンテナンスモードの利用にはphp artisan downコマンドを利用します。
このコマンド実行時にはstorage/framework/downにファイルが作成され、このファイルが存在する場合にはメンテナンスモードとして処理されます。
しかし、権限のないユーザーがこのコマンドを実行した際にはファイルが作成されず、エラーメッセージも出力されませんでした。
こういった場合にコンソール上にエラーメッセージが出力されるようになりました。
TestResponse::assertJsonValidationErrors()メソッド利用時のエラーメッセージが指定可能になりました (#28787)
認可機能でリソースのindexに対してviewAny()メソッドで許可可能になりました (#28820)
詳しい変更については以下を確認してください。
Release v5.8.22 · laravel/framework · GitHub
[Laravel] 5.8.20がリリースされました
laravel/frameworkのバージョン5.8.20がリリースされました。追加された機能について確認します。
PolicyクラスにviewAny()メソッドが追加されました (#28654, #28671)
特定のポリシーに対してviewAny()メソッドを定義すると、全体の振る舞いを定義することができます。
make:migrationコマンドにfullpathオプションが追加されました (#28669)
--fullpathオプションを使用すると作成されたファイルの絶対パスが表示されるので、リンクをクリックしてそれらに直接ジャンプすることができる場合に非常に便利です。
php artisan make:migration Test --fulpath
詳しい変更については以下を確認してください。
Release v5.8.20 · laravel/framework · GitHub
[Laravel] 5.8.19がリリースされました
laravel/frameworkのバージョン5.8.19がリリースされました。追加された機能について確認します。
envファイルでDynamoDBのエンドポイントを指定可能になりました (#28600)
CacheにDynamoDBを利用している場合など、DYNAMODB_ENDPOINTを設定することでエンドポイントのカスタマイズが可能になりました。
この設定を利用するにはconfig/cache.phpへの追加も必要です。
return [
// ...
'stores' => [
// ...
'dynamodb' => [
'driver' => 'dynamodb',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
'endpoint' => env('DYNAMODB_ENDPOINT'),
],
],
// ...
];
Illuminate\Foundation\ApplicationクラスにisProduction()メソッドが追加されました (#28602)
rescue()ヘルパー内で発生した例外の報告を無視できるようになりました (#28617)
3つ目の引数に真偽値を指定することで設定可能になりました。デフォルトはtrueで例外は報告されます。
/**
* Catch a potential exception and return a default value.
*
* @param callable $callback
* @param mixed $rescue
* @param bool $report
* @return mixed
*/
function rescue(callable $callback, $rescue = null, $report = true)
{
try {
return $callback();
} catch (Throwable $e) {
if ($report) {
report($e);
}
return value($rescue);
}
}
Redisへの接続情報をURL形式で指定可能になりました (#28612, f4cfb32)
以前にデータベースへの接続がURL形式で可能になったように、Redisでも対応されました。
Swift Mailerwp利用したメール送信の際に送信元のIPとドメインが指定可能になりました (#28631, 435c05b)
複数のIPアドレスを持つサーバーや、IPv4とIPv6の両方のアドレスを持つサーバーなどでの設定に役立ちます。
この設定を利用するにはconfig/mail.phpに追加が必要です。
return [
// ...
'source_ip' => 'your source ip',
'local_domain' => 'your local domain',
// ...
];
詳しい変更については以下を確認してください。
Release v5.8.19 · laravel/framework · GitHub
[Laravel] 5.8.18がリリースされました
laravel/frameworkのバージョン5.8.18がリリースされました。追加された機能について確認します。
Viewファイルで扱うファイルの拡張子にhtmlが追加されました (#28541)
Notificationクラスでメールを送信する際にSwiftMessageクラスを提供するコールバック関数が追加されました (#28535)
コールバックを指定することで、オリジナルのヘッダーの付与等が可能になりました。
$callback = function ($message) {
// someting
};
$message = (new MailMessage)
->withSwiftMessage($callback);
詳しい変更については以下を確認してください。
Release v5.8.18 · laravel/framework · GitHub