
[Laravel] 5.6がリリースされました
先日laravel 5.6がリリースされました。新しい機能や修正点について確認しましょう。
General
Symponyのバージョン4を使うようアップデートしました
Bootstrapのバージョン4を使うようアップデートしました
ApplicationContractにrunningUnitTests()が追加されました
cron-expressionが2.xを使うようアップデートしました
Artisan Console
optimizeコマンドが廃止されました
queue:work実行時にJob IDが出力されるようになりました
migrate:statusコマンドが追加されました
migrate:statusを実行することで、現在のマイグレーションの情報を確認できます
call()メソッドの第3引数に$outputBufferが追加されました
migrateコマンドに--realpathオプションが追加されました
--realpathオプションを使用することで、マイグレーションファイルを相対パスで指定できます
$ php artisan migrate --path=./tests/migrations --realpathmake:controllerコマンドに--apiオプションが追加されました
--apiオプションを使用することで、API用のコントローラー(index, store, show, update, destroy)が作成できます
Authentication
ResetPassword::toMail()を使ってパスワードリセット時の送信メールをカスタマイズできるようになりました
AuthServiceProvider::policies()メソッドが追加されました
policies()メソッドを利用して、現在適用されているポリシーを取得できます
Blade Templates
@csrfと@methodディレクテブが追加されました
今まで{{ csrf_field() }}や{{ method_field('PUT') }}と記述する必要があったものがディレクティブになりました。
Blade::component()メソッドを使ってカスタムディレクティブが登録できるようになりました
より便利にコンポーネントを利用するためにcomponent()メソッドを利用してディレクティブとして名前をつけることができます。
// プロバイダなどで登録
Blade::component('components.alert', 'alert');
// Bladeでの使用例
@component('alert')
<p>This is an alert component</p>
@endcomponenthtmlspecialcharsのdouble_encodeがデフォルトで'true'になりました
今まではdoubleEncode()メソッドがこの役割を果たしていましたが廃止され、withDoubleEncoding()メソッドとwithoutDoubleEncoding()メソッドが追加されました。
// src/Illuminate/View/Compilers/BladeCompiler.php
/**
* Set the "echo" format to double encode entities.
*
* @return void
*/
public function withDoubleEncoding()
{
$this->setEchoFormat('e(%s, true)');
}
/**
* Set the "echo" format to not double encode entities.
*
* @return void
*/
public function withoutDoubleEncoding()
{
$this->setEchoFormat('e(%s, false)');
}Laravel5.6では、Bladeとe()ヘルパーがデフォルトで特殊文字を二重にエンコードします。これにより、基礎となるhtmlspecialcharsのデフォルトの動作に揃えられます。
以前のダブルエンコーデング防止の動作を維持したい場合はBlade::withoutDoubleEncodingを利用します。
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Blade::withoutDoubleEncoding();
}
}Broadcasting
購読するチャンネルをクラスとして渡せるようになりました
Cache
RateLimiter::tooManyAttempts()から$decayMinutesの引数が削除されました
Collections
Collection@unique()メソッドにkeyを指定しなかった場合の挙動が修正されました
Collection@partition()メソッドにオペレーターの指定ができるようになりました
これによって、引数がcallbackから、keyとoperatorとvalueへ変更されました。
Collection::mapToDictionary()のパフォーマンスが改善されました
Collection::except()がキーの配列のみで実行可能になりました
Database
マイグレーションのBlueprint@morphsとBlueprint@nullableMorphsメソッド実行時に作成されるインデックスの命名規則が変更されました
// 変更前
$this->index(["{$name}_id", "{$name}_type"], $indexName);
// 変更後
$this->index(["{$name}_type", "{$name}_id"], $indexName);PostgreSQLでコメントが利用可能になりました
enumタイプのカラムを使用する際の挙動が変更されました
SQLiteGrammar::compileColumnListing()メソッドで重複したテーブルプレフィックスが防止されるよう修正されました
SQLiteで複数レコードに対するupdate()メソッドが利用可能になりました
SQLiteで実行された複数のクエリの中にサポートされていないメソッドがある場合に例外が発生するようになりました
whereTime()メソッドでオペレーターが省略可能 (=) になりました
Queue利用時のデータベーストランザクションの挙動が変更されました
whereRowValues()メソッドが追加されました
whereRowValues()を使用して複数の条件を一度に指定することができます。
$builder->whereRowValues(['last_update', 'order_number'], '<', [1, 2]);Pivot Modelのシリアライズが修正されました
DetectsLostConnectionsでThrowableが投げられるようになりました
Eloquent
Queue登録時に関連モデルの内容もシリアライズ可能になりました
関連モデルがポリモーフィックの場合に内部キーを指定可能になりました
refresh()メソッド実行時に内容が同期されるようになりました
MassAssignmentException発生時のメッセージが変更されました
getDateFormat()がpublicに変更されました
BelongsToMany::getPivotClass()が追加されました
Pivotレコード作成時に、自身の$dateFormatが正常に指定されるようになりました
BelongsToMany::withPivotValues()メソッドが追加されました
$pivotValuesが追加され、デフォルトの値を指定できます。
Eloquent EventにforceDeletedが追加されました
FactoryBuilder::getRawAttributes()メソッドが追加され、登録されていないfactoryが呼び出された場合に例外が発生するようになりました
一部のResourceクラスの命名が変更されました
日付形式へのキャスティングフォーマットをカスタムできるようになりました
Eloquentのdateとdatetimeのキャストフォーマットを個別に指定することができます。
protected $casts = [
'birthday' => 'date:Y-m-d',
'joined_at' => 'datetime:Y-m-d H:00',
];Hashing
暗号化方式にArgonが追加されました
Helpers
Arr::wrap()メソッドが引数がnullの場合に[]を返却するようになりました
class_uses_recursive()の戻り値のソート順が親クラスを優先するようになりました
Str::uuid()とStr::orderedUuid()メソッドが追加されました
Str::orderedUuid()はタイムスタンプをベースとしたUUIDを生成し、データベースのインデックスキーなどに効率よく利用できます。
// The methods return a Ramsey\Uuid\Uuid object
return (string) Str::uuid();
return (string) Str::orderedUuid();Logging
ログの出力方法が大幅に変更されました
- #22635
- 106ac2a7a1b337afd9edd11367039e3511c85f81
- 7ba0c22133da7ca99d1ec1459630de01f95130c1
- 03f870cb0b0eefde363b8985843aba68446a407c
- e691230578b010fe753f1973d5ab218a6510c0e9
新しくconfig/logging.phpが追加されました。
新しいLoggingはメッセージを複数のハンドラへ送信できるstackを用意しています。
syslogのラベルにアプリケーション名 (APP_ENV) になりました
MessageSendイベントのプロパティに$dataが追加されました
$dataに値を渡すことで、メッセージに追加の情報を付与することができるようになります。
メッセージ作成時のcallbacksの実行順序がattachmentsの前に変更されました
メール内容にHTMLの文字列を渡せるようになりました
Notifications
routeNotificationFor()メソッドを利用して通知クラスを指定可能になりました
Queues
Jobcontractにpayload()とgetJobId()メソッドが追加されました
Worker::raiseFailedJobEvent()メソッドが削除されました
RedisのQueueでblocking popが指定可能になりました
Requests
expectsJson()が明確なContent Typeでない場合にfalseを返すようになりました
Request::getSession()メソッドが追加されました
Request::hasAny()メソッドの引数に配列が指定可能になりました
Responses
Cookie\Factoryクラスに$rawと$sameSiteのパラメーターが追加されました
Modelで新しいレコードが作成された時に201のステータスコードを返却するようになりました
ResourceクラスでオリジナルのJsonResponseを指定できるようになりました
streamDownload()メソッドが追加されました
session.secureがtrueの場合にセキュアなセッションが許可されるように変更されました
Routing
SetCacheHeadersミドルウェアが追加されました
ThrottleRequestsで任意の上限が指定可能になりました
ミドルウェアの引数でrate_limitを直接指定することができます。
Route::middleware('auth:api', 'throttle:rate_limit,1')
->group(function () {
Route::get('/user', function () {
//
});
});Service Container
登録時のサービスプロバイダにおけるバルクバインディングのサポート
Support
Manager::driver()メソッドが引数がnullの場合に例外を投げるようになりました
Bus\DispatchercontractにhasCommandHandler()とgetCommandHandler()とmap()メソッドが追加されました
PaginatoruseBootstrapThree()が追加されました
Bootstrap 3のページネーションを利用する場合はPaginator::useBootstrapThreeを使用します。
<?php
namespace App\Providers;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Paginator::useBootstrapThree();
}
}Task Scheduling
マルチサーバーでのCron実行スケジュールが追加されました
この機能はCache Driverにmemcachedかredisを指定している場合にのみ利用できます。
$schedule->command('report:generate')
->fridays()
->at('17:00')
->onOneServer();