PHP Classes

File: README.md

Recommend this page to a friend!
  Classes of DeGraciaMathieu   Laravel Rapid Bind   README.md   Download  
File: README.md
Role: Documentation
Content type: text/markdown
Description: Documentation
Class: Laravel Rapid Bind
Create singletons to implement interfaces
Author: By
Last change:
Date: 15 days ago
Size: 2,005 bytes
 

Contents

Class file image Download

<p align="center">

<img style='height: 350px' src='https://github.com/DeGraciaMathieu/laravel-rapid-bind/assets/11473997/17e2a556-e081-4889-8ae4-30f074e41686'>

</p>

laravel-rapid-bind

testing

In an architecture based on ports and adapters, we create many bindings between interfaces and implementations.

Often, these bindings are simple and require no additional configuration.

This package facilitates the creation of these bindings, helping you avoid cluttering your AppServiceProvider.

Installation

Requires >= PHP 8.1

composer require degraciamathieu/laravel-rapid-bind

Usage

Provide information on the folders containing the interfaces :

<?php

namespace App\Providers;

class AppServiceProvider extends ServiceProvider
{
    /
     * Register any application services.
     */
    public function register(): void
    {
        RapidBind::bind([
            '../app/Domain/Ports/Repositories',
        ]);
    }

    /
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        //
    }
}

Now, add the Bind annotation on the port with the value of the FQCN of the associated adapter :

<?php

namespace App\Domain\Ports\Repositories;

use DeGraciaMathieu\RapidBind\Bind;
use App\Infrastructure\Repositories\UserRepositoryAdapter;

#[Bind(UserRepositoryAdapter::class)]
interface UserRepository
{
    //
}
<?php

namespace App\Infrastructure\Repositories;

use App\Domain\Ports\Repositories\UserRepository;

class UserRepositoryAdapter implements UserRepository
{
    //
}

From now on, a singleton has been automatically created between the port and the adapter !

$userRepository = app(UserRepository::class);

dd($userRepository); // App\Infrastructure\Repositories\UserRepositoryAdapter