Когда вам нужно настроить сервис в Laravel, то обычно это делается через сервис-провайдеры. Но тут есть один нюанс: они глобальные. Обычно это не имеет значения, но в многосекционных приложениях это может создать проблемы.
Например, вы хотите, чтобы дефолтный формат даты на сайта был d/m/Y, а в админ-панели даты должны отображаться в формате Y-m-d. Скорее всего, вы напишите в своем AppServiceProvider:
namespace App\Providers;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
    public function boot(Request $request)
    {
        if ($request->segment(1) === 'admin') {
            Carbon::setToStringFormat('Y-m-d');
        } else {
            Carbon::setToStringFormat('d/m/Y');
        }
    }
}
И всё в порядке — оно работает. Но что-то в этой проверке URL мне не нравится. По сути, мы мы обрабатываем определенные группы маршрутов. Звучит знакомо? У нас для этого есть мидлвары!
Вместо того, чтобы свалить всё в провайдеры — создайте два мидлвара. Где вы будете их хранить и как назовёте — не имеет значения. Для урока я создал App\Http\Middleware\BootstrapAdmin и App\Http\Middleware\BootstrapWeb.
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Carbon;
class BootstrapAdmin
{
    public function handle($request, Closure $next)
    {
        Carbon::setToStringFormat('Y-m-d');
    }
}
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Carbon;
class BootstrapWeb
{
    public function handle($request, Closure $next)
    {
        Carbon::setToStringFormat('d/m/Y');
    }
}
Возможно вы предпочтёте более описательные названия для ваших классов: BootstrapCarbonForAdmin и BootstrapCarbonForWeb. Всё зависит от того, как вы строите структуру вашего приложения.
Теперь мы можем применить эти мидлвары к нашим маршрутам.
use App\Http\Middleware\BootstrapAdmin;
use App\Http\Middleware\BootstrapWeb;
Route::middleware(BootstrapWeb::class)
    ->group(function () {
        //
    });
Route::prefix('admin')
    ->middleware(BootstrapAdmin::class)
    ->group(function () {
        //
    });
Этот паттерн я с удовольствием использую в больших проектах.
Автор: Sebastian De Deyne
Перевод: Алексей Широков
Наш  Телеграм-канал — следите за новостями о Laravel.

