> ## Documentation Index
> Fetch the complete documentation index at: https://docs.unleash-commerce.eu/llms.txt
> Use this file to discover all available pages before exploring further.

# Controllers

> Replace core controllers by swapping routes in the starter kit

## Overview

Core controllers are wired in the starter kit routes. To replace one, point the route to your own controller in `routes/web.php`. Keep returning response contracts from `Esign\UnleashCommerce\Core\Contracts\Http\Responses`.

## Replace a core controller

Swap the controller class in the route definition:

```php theme={null}
use App\Http\Controllers\ProductController as AppProductController;
use Esign\UnleashCommerce\Core\Http\Controllers\ProductController as CoreProductController; // [!code --]

Route::get(
    LaravelLocalization::transRoute('routes.products.show'),
    [CoreProductController::class, 'show'] // [!code --]
    [AppProductController::class, 'show'] // [!code ++]
)->name('products.show');
```

## Build your custom controller

Return the same response contract that the core controller expects:

```php theme={null}
namespace App\Http\Controllers;

use Esign\UnleashCommerce\Core\Contracts\Http\Responses\ProductResponse as ProductResponseContract;
use Esign\UnleashCommerce\Core\Contracts\Models\Product as ProductContract;
use Illuminate\Http\Request;

class ProductController
{
    public function show(ProductContract $product, Request $request): ProductResponseContract
    {
        return app(ProductResponseContract::class, [
            'product' => $product,
        ]);
    }
}
```

## Where to update routes

The starter kit routes live in `routes/web.php`. Replace any core controller class there with your own implementation.

## Available core controllers

See the [Controllers Reference](../reference/controllers) for a complete list of available controllers.
