Search code examples
phplaravellaravel-5service-provider

Which provider do I use to bind my database repositories in laravel 5?


I am working with laravel 5 and I am novice developer so I just learnt how to use the Repository pattern. Now as novices go, I first use the routes.php file to bind my UserRepositoryInterface to DbUserRepository like so:

App::bind('UserRepositoryInterface', 'DbUserRepository');

This is just psuedo, image the namepspaces with the above code too.

So after this I realized that that there is something called a Service Provider which is supposed to contain code like so. Now I refactored this in the AppServiceProvider in my Providers folder and it works fine still.

But since I will be having so many more repositories, is this is a good idea to place them into the AppServiceProvider or should I go ahead and make a dedicated provider for my repositories and bind them there? What is the best way to do this? Is there a standard for this?


Solution

  • So later I got to understand that this all about preference so I coded a RepositoryServiceProvider in which I bind all the repository contracts to the desired implementations like so:

    <?php
    
    namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    
    use Archive\Repositories\TenantRepository;
    use Archive\Repositories\TenantRepositoryEloquent;
    
    use Archive\Repositories\UserRepository;
    use Archive\Repositories\UserRepositoryEloquent;
    
    use Archive\Repositories\OrderRepository;
    use Archive\Repositories\OrderRepositoryEloquent;
    
    class RepositoryServiceProvider extends ServiceProvider
    {
        /**
         * Bootstrap the application services.
         *
         * @return void
         */
        public function boot()
        {
            //
        }
    
        /**
         * Register the application services.
         *
         * @return void
         */
        public function register()
        {
            $this->app->bind(TenantRepository::class, TenantRepositoryEloquent::class);
            $this->app->bind(UserRepository::class, UserRepositoryEloquent::class);
            $this->app->bind(OrderRepository::class, OrderRepositoryEloquent::class);
        }
    }