Via a solution provider | laravel-error-solutions | Spatie

 SPATIE

  Laravel Error Solutions
==========================

spatie.be/open-source

  [Docs](https://spatie.be/docs)  [Laravel-error-solutions](https://spatie.be/docs/laravel-error-solutions/v1)  Creating-your-own-solutions  Via a solution provider

 Version   v1

 Other versions for crawler [v1](https://spatie.be/docs/laravel-error-solutions/v1)

- [ Introduction ](https://spatie.be/docs/laravel-error-solutions/v1/introduction)
- [ Support us ](https://spatie.be/docs/laravel-error-solutions/v1/support-us)
- [ Requirements ](https://spatie.be/docs/laravel-error-solutions/v1/requirements)
- [ Installation &amp; setup ](https://spatie.be/docs/laravel-error-solutions/v1/installation-setup)
- [ Questions and issues ](https://spatie.be/docs/laravel-error-solutions/v1/questions-issues)
- [ Changelog ](https://spatie.be/docs/laravel-error-solutions/v1/changelog)
- [ About us ](https://spatie.be/docs/laravel-error-solutions/v1/about-us)

Basic usage
-----------

- [ Displaying solutions ](https://spatie.be/docs/laravel-error-solutions/v1/basic-usage/displaying-solutions)
- [ Runnable solutions ](https://spatie.be/docs/laravel-error-solutions/v1/basic-usage/runnable-solutions)
- [ AI powered solutions ](https://spatie.be/docs/laravel-error-solutions/v1/basic-usage/ai-powered-solutions)

Creating your own solutions
---------------------------

- [ Introduction ](https://spatie.be/docs/laravel-error-solutions/v1/creating-your-own-solutions/introduction)
- [ Creating a solution class ](https://spatie.be/docs/laravel-error-solutions/v1/creating-your-own-solutions/creating-a-solution-class)
- [ On exceptions ](https://spatie.be/docs/laravel-error-solutions/v1/creating-your-own-solutions/on-exceptions)
- [ Via a solution provider ](https://spatie.be/docs/laravel-error-solutions/v1/creating-your-own-solutions/via-a-solution-provider)

 Via a solution provider
=======================

###  On this page

1. [ Registering your solution provider ](#content-registering-your-solution-provider)

If you want to add solutions to exceptions that you can't modify, you can use a solution provider. A solution provider is a class that implements the `ProvidesSolution` interface. It will determine if it can provide a solution for a given exception.

Here's an example:

```
use Spatie\ErrorSolutions\Contracts\HasSolutionsForThrowable;
use Spatie\ErrorSolutions\Contracts\Solution;
use Throwable;

class YourSolutionProvider implements HasSolutionsForThrowable
{
    public function canSolve(Throwable $throwable): bool
    {
        // return true if you can provide a solution for this exception
    }

    /**
     * @param \Throwable $throwable
     *
     * @return array
     */
    public function getSolutions(Throwable $throwable): array
    {
        // return an array of solutions
    }
}
```

Registering your solution provider
--------------------------------------------------------------------------------------------------------------------------------------------------------------

After you've created your solution provider, you can register it in the `solution_providers` key of the `error-solutions.php` config file:

```
// config/error-solutions.php

return [
    'solution_providers' => [
        // other solution providers
        YourSolutionProvider::class,
    ],
];
```

Alternatively, you can register your solution provider at runtime. Typically, this would be done in a service provider:

```
// app/Providers/YourServiceProvider.php

use Spatie\ErrorSolutions\ErrorSolutionsServiceProvider;
use Spatie\ErrorSolutions\Contracts\SolutionProviderRepository;

public function register()
{
    $repository = app(SolutionProviderRepository::class);

    $repository->registerSolutionProviders([
        YourSolutionProvider::class,
    ]);
}
```
