Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

lat4732's avatar
Level 12

How to register a custom service in Laravel 11 with a corresponding facade?

Hey everyone!

I'm trying to register a new service class with its own service provider and facade in Laravel 11, but I'm having trouble getting it to work.

The service class:

namespace App\Lib\OpenAI\Services;

class OpenAIService
{
	// ..... Service methods
}

The service provider:

namespace App\Lib\OpenAI\Providers;

use App\Lib\OpenAI\Services\OpenAIService;
use GuzzleHttp\Client;
use Illuminate\Support\ServiceProvider;

class OpenAIServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton('openai', function () {
            return new OpenAIService(new Client());
        });
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}

The facade:

namespace App\Lib\OpenAI\Facades;

use Illuminate\Support\Facades\Facade;

class OpenAIFacade extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'openai';
    }
}

Then in boostrap/providers.php I've added the service provider:

return [
    App\Providers\AppServiceProvider::class,
    App\Lib\OpenAI\Providers\OpenAIServiceProvider::class
];

However, I'm having trouble figuring out how to register the facade and then use this service globally with OpenAI::someMethod().

0 likes
1 reply
martinbean's avatar
Level 80

@lat4732 You don’t “register” facades. You just use them.

Import the class. So long as what it’s pointing to (openai) exists in the service container, it will be resolved and method calls will be passed along.

use App\Lib\OpenAI\Facades\OpenAIFacade;

class SomeController extends Controller
{
    public function someMethod()
    {
        OpenAiFacade::foo();
    }
}

I’d also name your facade just OpenAi. It doesn’t need a Facade suffix, just like all Laravel’s facades don’t. You use Route, not RouteFacade; URL, not URLFacade; and so on.

Please or to participate in this conversation.