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

laravel/frameworkのバージョン5.7.23がリリースされました。追加された機能について確認します。

AbstractPaginatorクラスにgetOptions()メソッドが追加されました

ページネーションを作成する際に利用しているオプションを取得できるようになりました。

クラスを継承しているLengthAwarePaginatorPaginatorについても同様のメソッドが利用できます。

$p = new Paginator($array = ['item1', 'item2', 'item3'], 2, 2, ['path' => 'http://website.com/test']);

$options = $p->getOptions(); // -> ['path' => 'http://website.com/test']

DetectsLostConnectionsトレイとにエラーメッセージCommunication link failureが追加されました

EloquentBuilderscopeに関するメソッドをorWhereとして直接利用するためのクラスが追加されました

データベースクラスにIlluminate\Database\Eloquent\HigherOrderBuilderProxyが追加され、orWhere()メソッド実行時にコールバックで渡していたクエリをチェイン可能になりました。

内部の動作はCollectionクラスと同様にマジックメソッドを利用してHigherOrderBuilderProxyを実行しています。

scopeメソッドとor演算子を組み合わせる際のコールバックの記述が不要になります。

// scopeFoo, scopeBar, scopeBaz on the Model class
$query->foo()->orWhere(function (Builder $query) {
    $query->bar();
})->orWhere(function (Builder $query) {
    $query->baz();
});

// after
$query->foo()->orWhere->bar()->orWhere->baz();
// scopeFoo, scopeBar, scopeBaz on the Model class
$query->foo()->orWhere(function (Builder $query) {
    $query->bar();
})->baz();

// after
$query->foo()->orWhere->bar()->baz();

同じような処理はCollectonにも実装されていますが、初めて見る場合には実装が把握しづらいと思われます。

こちら(#27281)の内容を一読しておくとよいでしょう。

アプリケーションパスを設定できるようになりました

bootstrap/app.phpにて指定可能です。

$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);

$app->useAppPath(__DIR__ . '/../src/App');

ログ設定のStackDriverWhatFailureGroupHandlerが利用可能になりました

例えばログをSlackに通知している場合に、ネットワーク等の問題で通知できなかった場合にエラーを無視して次のハンドラを実行します。

本番環境などでホワイトスクリーンを防ぐのに非常に役に立ちます。

monolog/02-handlers-formatters-processors.md at master · Seldaek/monolog · GitHub

利用する際にはconfig/logging/phpignore_exceptionsを追加します。

'stack' => [
    'driver' => 'stack',
    'channels' => ['single'],
    'ignore_exceptions' => true,
],

詳しい変更については以下を確認してください。

Release v5.7.23 · laravel/framework · GitHub

© Xzxzyzyz