Skip to main content

Overview

Unleash Commerce Core exposes middleware through container bindings. You can replace core middleware by binding the contract to your own class.

Replace a core middleware

Create a custom middleware that extends the core implementation and implements the same contract:
namespace App\Http\Middleware;

use Closure;
use Esign\UnleashCommerce\Core\Contracts\Http\Middleware\EnsureUserHasCustomerMiddleware as EnsureUserHasCustomerMiddlewareContract;
use Esign\UnleashCommerce\Core\Http\Middleware\EnsureUserHasCustomerMiddleware as BaseEnsureUserHasCustomerMiddleware;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class EnsureUserHasCustomerMiddleware extends BaseEnsureUserHasCustomerMiddleware implements EnsureUserHasCustomerMiddlewareContract
{
    public function handle(Request $request, Closure $next): Response
    {
        if ($request->user()?->is_suspended) {
            abort(Response::HTTP_FORBIDDEN);
        }

        return parent::handle($request, $next);
    }
}

Bind the middleware contract

Bind the core contract to your custom class in a service provider so the core resolves your middleware:
<?php

namespace App\Providers;

use App\Http\Middleware\EnsureUserHasCustomerMiddleware;
use Esign\UnleashCommerce\Core\Contracts\Http\Middleware\EnsureUserHasCustomerMiddleware as EnsureUserHasCustomerMiddlewareContract;
use Illuminate\Support\ServiceProvider;

class UnleashCommerceServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        $this->registerMiddleware();
    }

    protected function registerMiddleware(): void
    {
        $this->app->bind(
            EnsureUserHasCustomerMiddlewareContract::class,
            EnsureUserHasCustomerMiddleware::class
        );
    }
}

Available core middleware contracts

See the Middleware Reference for a complete list of available middleware you can replace.