[Laravel] 7.0がリリースされました
Laravelのバージョン7.0がリリースされました。追加された機能について確認します。
Version 7
Laravelのv6.0の時点でアナウンスされた通り、バージョニングの方法が変更され、6ヶ月ごとに行われるメジャーリリースが行われました。
Bug Fixesは2020年09月03日、Security Fixesは2021年03月03日までサポートされます。
現在のLTSバージョンであるv6.0は、Bug Fixesは2021年09月03日、Security Fixesは2022年09月03日までサポートされます。
laravel/laravelでのPHPのバージョンが7.2.5以上に変更されています。
Releases
リリースノートでは以下のような追加機能が発表されています。
Laravel Airlockの導入
ルーティング速度の改善
カスタムEloquentキャスト
Bladeコンポーネントクラスの追加
新しい文字列操作クラスの追加
HTTPクライアントの追加
CORSのサポート
ルートモデルバインディングの改善
Stubのカスタマイズのサポート
データベースキューの改善
メール送信時のマルチドライバ
データベースクエリ発行時のキャスト設定
Artisanコマンドの追加
各項目についての詳細を確認します。
Laravel Airlock
Laravel Airlockは、SPA(単一ページアプリケーション)、モバイルアプリケーション、およびシンプルなトークンベースのAPI向けのフェザーウェイト認証システムを提供します。
Airlockを使用すると、アプリケーションの各ユーザーがアカウントに対して複数のAPIトークンを生成できます。
これらのトークンには、トークンが実行できるアクションを指定する能力/スコープが付与することが可能です。
LaravelにはOAuth2に対応したLaravel Passportがありましたが、これとの共存も可能です。
LaravelのエコシステムであるVapor、Forge、Novaなどのフロント部分はVue.js等を利用したAPIベースの実装がされています。
このようにバックエンドにLaravelを利用し、フロントエンドは別で用意する場合などにLaravel Airlockは大変便利な機能を提供します。
詳しい利用方法についてはこちらをご覧ください。
Custom Eloquent Casts
Eloquentモデルクラスでは、値の出力時には用意されたフォーマットにキャストすることが可能です。
CastsAttributesインターフェイスを実装するクラスを定義することで、オリジナルのキャストが行えるようになりました。
実装はget()とset()のみのシンプルな実装です。
get()メソッドはデータベースからの生の値をキャストする際に呼び出されます。
set()メソッドは与えられた値をデータベースに保存する際に呼び出されます。
Laravelに組み込まれているJsonタイプへのキャストは以下のような実装になっています。
<?php
namespace App\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
class Json implements CastsAttributes
{
/**
* Cast the given value.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param mixed $value
* @param array $attributes
* @return array
*/
public function get($model, $key, $value, $attributes)
{
return json_decode($value, true);
}
/**
* Prepare the given value for storage.
*
* @param \Illuminate\Database\Eloquent\Model $model
* @param string $key
* @param array $value
* @param array $attributes
* @return string
*/
public function set($model, $key, $value, $attributes)
{
return json_encode($value);
}
}
カスタムキャストタイプを定義したら、クラス名を使用してモデルにアタッチできます。
<?php
namespace App;
use App\Casts\Json;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'options' => Json::class,
];
}
詳しい利用方法についてはこちらをご覧ください。
Blade Component Tags & Improvements
コンポーネントは、受け入れるデータを指定する関連クラスを持つことができます。
コンポーネントクラスで定義されているすべてのパブリックプロパティとメソッドは、コンポーネントビューで自動的に使用可能になります。
コンポーネントで指定された追加のHTML属性は、自動的に含まれる$ attribute変数を使用して管理できます。
この例では、App\View\Components\Alertコンポーネントが次のように定義されていると仮定します。
<?php
namespace App\View\Components;
use Illuminate\View\Component;
class Alert extends Component
{
/**
* The alert type.
*
* @var string
*/
public $type;
/**
* Create the component instance.
*
* @param string $type
* @return void
*/
public function __construct($type)
{
$this->type = $type;
}
/**
* Get the class for the given alert type.
*
* @return string
*/
public function classForType()
{
return $this->type == 'danger' ? 'alert-danger' : 'alert-warning';
}
/**
* Get the view / contents that represent the component.
*
* @return \Illuminate\View\View|string
*/
public function render()
{
return view('components.alert');
}
}
そして、コンポーネントのBladeテンプレートが次のように定義されていると仮定します。
<!-- /resources/views/components/alert.blade.php -->
<div class="alert {{ $classForType }}" {{ $attributes }}>
{{ $heading }}
{{ $slot }}
</div>
コンポーネントは、コンポーネントのタグを使用して別のブレードビューでレンダリングできます。
<x-alert type="error" class="mb-4">
<x-slot name="heading">
Alert content...
</x-slot>
Default slot content...
</x-alert>
詳しい利用方法についてはこちらをご覧ください。
また、Laracastでも使用法の動画が公開されています。
What's New in Laravel 7: Supercharged Blade Components
HTTP Client
Laravelは、Guzzle, PHP HTTP clientを基盤として、メソッドの追加を行うことで最小限のAPIを提供するようになりました。
これにより、他のWebアプリケーションと通信するために発信HTTPリクエストをすばやく行うことができます。
Guzzleに対するLaravelのラッパーは、開発者がより効率的に作業ができることに焦点が当てられています。
たとえば、クライアントは簡単にPOSTを実行し、JSONデータとやり取りします。
use Illuminate\Support\Facades\Http;
$response = Http::withHeaders([
'X-First' => 'foo',
'X-Second' => 'bar'
])->post('http://test.com/users', [
'name' => 'Taylor',
]);
return $response['id'];
さらに、HTTPクライアントは、素晴らしいテスト機能を提供します。
Http::fake([
// Stub a JSON response for GitHub endpoints...
'github.com/*' => Http::response(['foo' => 'bar'], 200, ['Headers']),
// Stub a string response for Google endpoints...
'google.com/*' => Http::response('Hello World', 200, ['Headers']),
// Stub a series of responses for Facebook endpoints...
'facebook.com/*' => Http::sequence()
->push('Hello World', 200)
->push(['foo' => 'bar'], 200)
->pushStatus(404),
]);
詳しい利用方法についてはこちらをご覧ください。
Fluent String Operations
Laravelの既存のIlluminate\Support\Strクラスはとても便利な機能を提供してくれています。
このクラスは、Illuminate\Support\Strに付け加えて有用な文字列操作関数を提供します。
Laravel 7は、これらの機能の上に構築された、よりオブジェクト指向で流な文字列操作ライブラリを提供します。
Str::ofメソッドを使用して、Illuminate\Support\Stringableオブジェクトを作成できます。
その後、さまざまなメソッドをオブジェクトにチェーンして、文字列を操作できます。
return (string) Str::of(' Laravel Framework 6.x ')
->trim()
->replace('6.x', '7.x')
->slug();
詳しい利用方法についてはこちらをご覧ください。
また、Laracastでも使用法の動画が公開されています。
What's New in Laravel 7: Fluent String Manipulation
Route Model Binding Improvements
Key Customization
id以外の列を使用してEloquentモデルを解決したい場合があります。
そのために、Laravel 7では、ルートパラメーター定義で列を指定できます。
Route::get('api/posts/{post:slug}', function (App\Post $post) {
return $post;
});
Automatic Scoping
1つのルート定義で複数のEloquentモデルを暗黙的にバインドする場合、2番目のEloquentモデルのスコープを設定して、最初のEloquentモデルの子にする必要がある場合があります。
たとえば、特定のユーザーのSlugでブログ投稿を取得するこの状況を考えてみましょう。
use App\Post;
use App\User;
Route::get('api/users/{user}/posts/{post:slug}', function (User $user, Post $post) {
return $post;
});
ネストされたルートパラメーターとしてカスタムキー付きの暗黙的なバインディングを使用する場合、Laravel 7は自動的にクエリをスコープし、親子関係を推測して、親によってネストされたモデルを取得します。
この場合、UserモデルにはPostという名前のリレーションがあり、これを使用してPostモデルを取得することができます。
詳しい利用方法についてはこちらをご覧ください。
Multiple Mail Drivers
Laravel 7では、アプリケーションに対して複数のメールドライバが設定できるようになりました。
メール設定ファイル内で構成された各ドライバには、独自のオプションと独自のトランスポートがあり、アプリケーションで特定の電子メールメッセージを送信するために異なる電子メールサービスを使用できます。
たとえば、アプリケーションでPostmarkを使用してトランザクションメールを送信し、Amazon SESを使用してバルクメールを送信する場合があります。
デフォルトでは、Laravelはメール設定ファイルでデフォルトのメーラーとして設定されたドライバを使用します。
ただし、mailer()メソッドを使用して、特定のドライバを使用してメッセージを送信できます。
Mail::mailer('postmark')
->to($request->user())
->send(new OrderShipped($order));
Route Caching Speed Improvements
Laravel 7には、route:cacheのArtisanコマンドを使用してキャッシュされたコンパイル済みのキャッシュされたルートを一致させる新しい方法が含まれています。
大規模なアプリケーション(たとえば、800以上のルートを持つアプリケーション)では、これらの改善により、単純な「Hello World」ベンチマークでの1秒あたりの要求速度が2倍になります。アプリケーションを変更する必要はありません。
CORS Support
Laravel 7には、Barry vd. Heuvelによって作成されたLaravel CORSパッケージを統合することにより、クロスオリジンリソースシェアリング(CORS)OPTIONSリクエストレスポンスを構成するためのファーストパーティサポートが含まれています。
新しいcorsの設定ファイルは、デフォルトのLaravelアプリケーションに含まれています。
詳しい利用方法についてはこちらをご覧ください。
Query Time Casts
テーブルから生の値を選択するときなど、クエリの実行中にキャストを適用する必要がある場合があります。
たとえば、次のクエリを検討してください。
use App\Post;
use App\User;
$users = User::select([
'users.*',
'last_posted_at' => Post::selectRaw('MAX(created_at)')
->whereColumn('user_id', 'users.id')
])->get();
このクエリの結果のlast_posted_atは文字列になります。
クエリの実行時に、この属性に日付キャストを適用できれば便利です。
これを達成するために、Laravel 7が提供するwithCastsメソッドを使用できます。
$users = User::select([
'users.*',
'last_posted_at' => Post::selectRaw('MAX(created_at)')
->whereColumn('user_id', 'users.id')
])->withCasts([
'last_posted_at' => 'date'
])->get();
MySQL 8+ Database Queue Improvements
Laravelの以前のリリースでは、デッドロックのために、データベースキューは本番環境での使用に十分な堅牢性があるとは見なされていませんでした。
ただし、Laravel 7では、MySQL 8+をデータベースバックアップキューとして使用するアプリケーションに改善が加えられています。
FOR UPDATE SKIP LOCKED句およびその他のSQL拡張機能を使用することにより、データベースドライバーをより安全に使用できるようになりました。
Artisan test Command
phpunitコマンドに加えて、Artisanのtestコマンドを使用してテストを実行できます。
Artisanテストランナーは、美しいコンソールUXと、現在実行中のテストに関する詳細情報を提供します。
さらに、ランナーは最初のテストの失敗で自動的に停止します。
phpunitコマンドに渡すことができる引数は、Artisanのtestコマンドにも渡すことができます。
php artisan test --group=feature
Markdown Mail Template Improvements
デフォルトのMarkdownメールテンプレートは、Tailwind CSSカラーパレットに基づいた、より新しくモダンなデザインが導入されました。
もちろん、このテンプレートはアプリケーションのニーズに応じて公開およびカスタマイズできます。
詳しい利用方法についてはこちらをご覧ください。
Stub Customization
Artisanコンソールのmakeコマンドは、コントローラー、ジョブ、マイグレーション、テストなどのさまざまなクラスを作成するために使用されます。
これらのクラスは、入力に基づいた値が入力されたstubファイルを使用して生成されます。
ただし、Artisanによって生成されたファイルに小さな変更を加えたい場合があります。
これを実現するために、Laravel 7は、カスタマイズのために最も一般的なスタブを公開するstub:publishコマンドを提供します。
php artisan stub:publish
公開されたstubは、アプリケーションのルートにあるstubsディレクトリ内に配置されます。
これらのスタブに加えた変更は、artisan makeコマンドを使用して対応するクラスを生成するときに反映されます。
Queue maxExceptions Configuration
ジョブが何度もリトライされるように指定したい場合もありますが、指定された数の例外によって再試行がトリガーされると失敗するはずです。
Laravel 7では、ジョブクラスでmaxExceptionsプロパティを定義できます。
<?php
namespace App\Jobs;
class ProcessPodcast implements ShouldQueue
{
/**
* The number of times the job may be attempted.
*
* @var int
*/
public $tries = 25;
/**
* The maximum number of exceptions to allow before failing.
*
* @var int
*/
public $maxExceptions = 3;
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Redis::throttle('key')->allow(10)->every(60)->then(function () {
// Lock obtained, process the podcast...
}, function () {
// Unable to obtain lock...
return $this->release(10);
});
}
}
この例では、アプリケーションがRedisロックを取得できず、最大25回再試行され続ける場合、ジョブは10秒間解放されます。
ただし、3つの未処理の例外がジョブによってスローされると、ジョブは失敗します。
詳しい変更については以下を確認してください。
Release Notes - Laravel - The PHP Framework For Web Artisans
[Laravel] 6.16.0がリリースされました
laravel/frameworkのバージョン6.16.0がリリースされました。追加された機能について確認します。
Guzzleのv7がサポートされました(#31484)
Illuminate\Database\Query\Builder::groupByRaw()メソッドが追加されました (#31498)
SQLiteでJsonデータの更新が可能になりました (#31492)
詳しい変更については以下を確認してください。
Release v6.16.0 · laravel/framework · GitHub
[Laravel] 6.15.0がリリースされました
laravel/frameworkのバージョン6.15.0がリリースされました。追加された機能について確認します。
Illuminate\Auth\Events\Validatedイベントが追加されました (#31357, @7ddac28)
このイベントは認証プロバイダーがユーザーを取得し、検証された後にログインイベント発火前に発火されます。
これにより認証が成功した後で、サードパーティーのパッケージが認証情報に介入することができるようになります。
また、ログインの際に外部API接続のような複雑なロジックがある場合でも、このイベントをリッスンしてフィルターを作成できます。
Blueprintクラスでマクロが利用できるようになりました (#31365)
Illuminate\Console\Scheduling\Scheduleクラスでマクロが利用できるようになりました (#31354)
BusFakeクラスにdispatchAfterResponse()メソッドが追加されました (#31418)
Bus::fake()を使ったジョブのディスパッチを検証できるようになりました。
Illuminate\Foundation\Exceptions\Handler::getHttpExceptionView()メソッドが追加されました (#31420)
カスタムしたエラーページを表示する場合に、renderHttpException()を変更せずに、getHttpExceptionView()をオーバーライドすることでエラー時に表示するViewを指定できるようになりました。
protected function getHttpExceptionView(HttpExceptionInterface $e)
{
return "custom-error-view";
}
Artisanコマンドでテーブルの出力が可能になりました (#31426)
コンソールへの出力にテーブルが使えるようになりました。
public function handle()
{
$table = $this->table(
['Column', 'Another column'],
[]
);
$table->appendRow(['Value', 'Another Value']);
$table->appendRow(['Value', 'Another Value']);
}
$ php artisan {command}
+--------+----------------+
| Column | Another column |
+--------+----------------+
| Value | Another Value |
| Value | Another Value |
+--------+----------------+
詳しい変更については以下を確認してください。
Release v6.15.0 · laravel/framework · GitHub
[Laravel] 6.14.0がリリースされました
laravel/frameworkのバージョン6.14.0がリリースされました。追加された機能について確認します。
Illuminate\Bus\Dispatcher::dispatchAfterResponse()メソッドが追加されました (#31300, @8a3cdb0)
レスポンス完了直後にジョブを実行します。
キューへ登録する必要のないような小さな処理に向いています。
Illuminate\Support\Testing\Fakes\QueueFake::assertPushedWithoutChain()メソッドが追加されました (#31332, @7fcc6b5)
ジョブのチェーンに何も指定されていないことを確認できます。
Queue::fake();
MoveFile::withChain(
$medium->isImage ? [new GenerateImages($medium)] : [],
)->dispatch($medium);
Queue::assertPushedWithEmptyChain(MoveFile::class);
Illuminate\Events\DispatcherクラスにMacroableトレイトが追加されました (#31317)
NoPendingMigrationsイベントが追加されました (#31289, @739fcea)
実行するマイグレーションが無かった場合にイベントが発火します。
詳しい変更については以下を確認してください。
Release v6.14.0 · laravel/framework · GitHub
[Laravel] 6.13.0がリリースされました
laravel/frameworkのバージョン6.13.0がリリースされました。追加された機能について確認します。
make:modelコマンドに--apiオプションが追加されました (#31197, #31222)
モデル作成時にAPI用のコントローラーが作成できるオプションです。
php artisan make:model Order --api
PendingResourceRegistration::shallow()メソッドが追加されました (#31208, @104c539)
resource()メソッドを使ったルーティングの記述が簡単になりました。
// Before
Route::resource('foo.bar', 'BarController')->only(['index', 'create', 'store']);
Route::resource('bar', 'BarController')->only(['show', 'edit', 'update', 'destroy']);
// After
Route::resource('foo.bar', 'BarController')->shallow();
クロージャーを使ったバリデーションメッセージのフォーマットが可能になりました (#31246)
バリデーションルールにネストした配列を使う場合、エラーメッセージのフォーマットできるようになりました。
$translator = new Translator(new ArrayLoader, 'en');
$translator->addLines(['validation.string' => ':attribute must be a string!'], 'en');
$validator = new Validator($translator, [['name' => 1]], ['*.name' => 'string']);
$validator->setImplicitAttributesFormatter(function ($attribute) {
[$line, $attribute] = explode('.', $attribute);
return sprintf('%s at line %d', $attribute, $line + 1);
});
$validator->passes();
$this->assertEquals('name at line 1 must be a string!', $validator->getMessageBag()->all()[0]);
Filesystem::ensureDirectoryExists()メソッドが追加されました (@8a8eed4)
指定したパスにディレクトリ が存在しない場合にディレクトリ を作成します。
FTPドライバーでStorage::url()が利用可能になりました (#31258, @b8790e5)
詳しい変更については以下を確認してください。
Release v6.13.0 · laravel/framework · GitHub
[Laravel] 6.12.0がリリースされました
laravel/frameworkのバージョン6.12.0がリリースされました。追加された機能について確認します。
ServiceProvider::loadFactoriesFrom()メソッドが追加されました (#31133)
パッケージ自体にFactoryをロードする関数が追加されました。
テスト時にパッケージが提供するFactoryを使用できる様になります。
$this->loadFactoriesFrom('source/database/factories');
$this->loadFactoriesFrom([
'source_one/database/factories',
'source_two/database/factories',
]);
TestResponse::dumpSession()メソッドが追加されました (#31131)
dumpHeaders()メソッドと同じ様に、セッションからすべてのキーまたは選択したキーをダンプします。
Str::isUuid()メソッドが追加されました (#31148)
UUIDに関するバリデーションメソッドがStrクラスに移植されました。
これによりStrクラスを使ってのバリデーションも可能になりました。
Str::isUuid('a0a2a2d2-0b87-4a18-83f2-2529882be2de'); // Returns true
Str::isUuid('laravel'); // Returns false
PHPUnit7のサポートが復旧しました (#31113)
Request::boolean()メソッドが追加されました (#31160)
パラメーターが以下の場合にはtrue、それ以外の場合にはfalseを返します
1
true
on
yes
$request = Request::create('/', 'GET', ['with_trashed' => 'false', 'download' => true, 'checked' => 1, 'unchecked' => '0']);
$this->assertTrue($request->boolean('checked'));
$this->assertTrue($request->boolean('download'));
$this->assertFalse($request->boolean('unchecked'));
$this->assertFalse($request->boolean('with_trashed'));
$this->assertFalse($request->boolean('some_undefined_key'));
Database\Eloquent\FactoryBuilder::createMany()メソッドが追加されました (#31171, @6553d59)
複数のデータを作成する際に配列を渡せるようになりました。
// Before
factory(User::class)->create([
'name' => 'Taylor',
]);
factory(User::class)->create([
'name' => 'John',
]);
factory(User::class)->create([
'name' => 'Doe',
]);
// After
factory(User::class)->createMany([
[
'name' => 'Taylor',
],
[
'name' => 'John'
],
[
'name' => 'Doe'
],
]);
PhpRedisにオプションが追加されました (#31182)
以下のオプションが追加されました
serializer (here)
scan (here)
failover (here)
詳しい変更については以下を確認してください。
Release v6.12.0 · laravel/framework · GitHub
[Laravel] 6.11.0がリリースされました
laravel/frameworkのバージョン6.11.0がリリースされました。追加された機能について確認します。
Eloquent BuilderにfirstWhere()メソッドが追加されました (#31089)
以前からある->where(...)->first()のショートカットです。
// Before
User::where('emaill', '[email protected]')->first();
// After
User::firstWhere('email', '[email protected]');
Redisで複数のサービスへBroadcastを行うしのパフォーマンスが向上しました (#31108)
詳しい変更については以下を確認してください。
Release v6.11.0 · laravel/framework · GitHub
[Laravel] 6.10.0がリリースされました
laravel/frameworkのバージョン6.10.0がリリースされました。追加された機能について確認します。
テストヘルパーにwithoutMix()とwithMix()メソッドが追加されました (#30900)
テストを行う際にLaravel Mixの解除や再接続が可能になりました。
RequestクラスにvalidateWithBag()マクロが追加されました (#30835, @c0fdb56 )
バリデーション失敗時に作成されるMessageMagにオリジナルの名前を付けれるようになりました。
$request = Request::create('/', 'GET', ['name' => null]);
try {
$request->validateWithBag('some_bag', ['name' => 'string']);
} catch (ValidationException $validationException) {
$this->assertEquals('some_bag', $validationException->errorBag);
}
バリデーションルールにexclude_ifとexclude_unless が追加されました (#30873)
例えばhas_doctor_appointmentチェックボックスがあるフォームで、チェックボックスを切り替えると日付と医師の名前を入力するフォームの表示と非表示が切り替わります。
チェックボックスをオフにした場合にはフォームは表示されませんが、値が入力済みの場合にはリクエスト時に送信されます。
このデータを検証する場合にはrequire_ifを使う場合にはデータのトリミングが必要です。
public function post(Request $request)
{
$data = $request->validate([
'has_doctor_appointment' => 'required|bool',
'appointment_date' => 'required_if:has_doctor_appointment,true|date',
'doctor_name' => 'required_if:has_doctor_appointment,true|string'
]);
// $data === ['has_doctor_appointment' => false, 'appointment_date' => '2019-12-13']
if (! $data['has_doctor_appointment') {
$data['appointment_date'] = null;
$data['doctor_name'] = null;
}
SomeModel::create($data);
}
exclude_ifを使用すると、このように検証できるようになります。
public function post(Request $request)
{
$data = $request->validate([
'has_doctor_appointment' => 'required|bool',
'appointment_date' => 'exclude_if:has_appointment,false|required|date',
'doctor_name' => 'exclude_if:has_appointment,false|required|string',
]);
// $data === ['has_appointment' => false]
SomeModel::create($data);
}
PostgreSQLでvirtualとstoredカラムがサポートされるようになりました (#30971)
Eloquent Builderにmixin()メソッドが追加されました (#30978, @28fa74e)
macro()メソッドでの追加はすでにサポート済みでしたが、mixin()メソッドで一度に複数のマクロを追加できるようになりました。
Redis ConnectionにMacroableトレイトが追加されました (#31020)
PackageManifest::config()メソッドが追加されました (#31039, @9b73540)
パッケージ内のcomposer.jsonファイルのprovidersとaliasesにオリジナルのクラスを指定可能でしたが、任意の設定を参照できる様になりました。
サービスコンテナにredis.connectionのエイリアスが追加されました (#31034)
Illuminate\Console\CommandクラスからLaravelに依存していた部分が別のクラスに抽出されました (#31026, @ef72716 )
Storage::putFile()メソッドのファイルパスに絶対パスが指定可能になりました (#31040)
詳しい変更については以下を確認してください。
Release v6.10.0 · laravel/framework · GitHub
[Laravel] 6.9.0がリリースされました
laravel/frameworkのバージョン6.9.0がリリースされました。追加された機能について確認します。
Testing/FileFactoryにMIMEタイプが指定可能になりました (#30870)
create()メソッドの第三引数、もしくは生成されたFileクラスのmimeType()メソッドで指定できるようになりました。
(new FileFactory)->create('someaudio.webm', 0, 'audio/webm')->getMimeType(); // audio/webm
(new FileFactory)->create('someaudio.webm')->mimeType('audio/webm')->getMimeType(); // audio/webm
make:modelコマンドの--allメソッドでseed オプションが有効になりました (#30874)
emergency loggerのオプションを指定可能になりました (#30873)
EmergencyLoggerは指定のログチャンネルの取得に失敗した場合に利用される緊急用のチャンネルです。
config/logging.phpにてこのログの出力先が指定可能になりました。
return [
...
'channels' => [
...
'emergency' => [
'path' => storage_path('logs/laravel.log'),
],
],
];
Kernalクラスにミドルウェアを操作するメソッドが追加されました (@6f33feb)
ミドルウェアの実行を制御するメソッドが追加されました。
prependMiddlewareToGroup()
appendMiddlewareToGroup()
prependToMiddlewarePriority()
appendToMiddlewarePriority()
詳しい変更については以下を確認してください。
Release v6.9.0 · laravel/framework · GitHub
[Laravel] 6.8.0がリリースされました
laravel/frameworkのバージョン6.8.0がリリースされました。追加された機能について確認します。
マークダウンメールにカスタマイズされたテーマが利用できるようになりました (#30814, @2206d52)
今までのマークダウンメールのテーマはmail::で始まるviewしか利用できませんでしたが、自由に指定できる様になりました。
Inspiringコマンドに引用文が追加されました (@4a7d566, @9693ced)
TestResponse::assertViewHas()メソッドでネストされた配列の確認が可能になりました (#30837)
レスポンスの一部をテストしたい場合などに便利です。
// before
$this->get('/page')
->assertViewHas('page', [
'component' => 'PageComponent',
'url' => '/page',
'version' => null,
'props' => [
'user_name' => 'John Doe'
]
]);
// after
$this->get('/page')
->assertViewHas('page.props', [
'user_name' => 'John Doe'
]);
Model::setRawAttribute()メソッドが追加されました (#30853)
ミューテーターをスキップして特定の値を代入できるようになりました。
// Set attribute to value and also sync to original attribute.
$model->setRawAttribute('key', $value, true);
Model::setRawAttribute()メソッドが追加されました (#30853)
make:controllerコマンドに--forceメソッドが追加されました (#30853)
resource::collection()の引数に配列が渡せるようになりました (#30800)
JsonResponseとTestResponseでレスポンスの内容に配列でアクセスできるようになりました (#30817)
JSON形式のAPIの内容をテストする際に、これまでは$response-> original ['key']から値を取得する必要がありましたが、レスポンスの内容に直接アクセスできるようになりました。
// before
$this->assertCount(2, $response->original['key']);
// after
$this->assertCount(2, $response['key']);
make::modelコマンドに--seedオプションが追加されました (#30828, @2cd9417)
モデル作成時に--seedオプションをつけて、そのモデルのSeederも同時に作成できます。
詳しい変更については以下を確認してください。
Release v6.8.0 · laravel/framework · GitHub