[Laravel] 5.6がリリースされました

先日laravel 5.6がリリースされました。新しい機能や修正点について確認しましょう。

General

Symponyのバージョン4を使うようアップデートしました


Bootstrapのバージョン4を使うようアップデートしました


ApplicationContractにrunningUnitTests()が追加されました


cron-expression2.xを使うようアップデートしました

Artisan Console

optimizeコマンドが廃止されました


queue:work実行時にJob IDが出力されるようになりました


migrate:statusコマンドが追加されました

migrate:statusを実行することで、現在のマイグレーションの情報を確認できます


call()メソッドの第3引数に$outputBufferが追加されました


migrateコマンドに--realpathオプションが追加されました

--realpathオプションを使用することで、マイグレーションファイルを相対パスで指定できます

$ php artisan migrate --path=./tests/migrations --realpath

make: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>
@endcomponent

htmlspecialcharsの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から、keyoperatorvalueへ変更されました。


Collection::mapToDictionary()のパフォーマンスが改善されました


Collection::except()がキーの配列のみで実行可能になりました

Database

マイグレーションのBlueprint@morphsBlueprint@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のシリアライズが修正されました


DetectsLostConnectionsThrowableが投げられるようになりました

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

ログの出力方法が大幅に変更されました

新しくconfig/logging.phpが追加されました。

新しいLoggingはメッセージを複数のハンドラへ送信できるstackを用意しています。


syslogのラベルにアプリケーション名 (APP_ENV) になりました

Mail

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.securetrueの場合にセキュアなセッションが許可されるように変更されました

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にmemcachedredisを指定している場合にのみ利用できます。

$schedule->command('report:generate')
    ->fridays()
    ->at('17:00')
    ->onOneServer();

Validation

validateDimensions()メソッドでMimeTypeがimage/svg+xmlのSGVが許可されるようになりました


validate()メソッドがvalidateResolved()に名称変更されました

Testing

PHPUnit 7を使用するようになりました


Json Helper使用時に特定のキーを指定可能になりました


RefreshDatabaseトレイトでDatabaseTransactionsトレイトを利用するようになりました


assertSeeInOrder()assertSeeTextInOrder()メソッドが追加されました



https://github.com/laravel/framework/releases/tag/v5.6.0

© Xzxzyzyz