In laravel, there are times when you need to install packages only for your local or development environment for debugging and testing purposes.
Even if you specify those packages in require-dev section of your composer.json file, you still need to add the service providers and aliases in the config/app.php file. Without that, it won’t work.
With Laravel 5, you can easily load service providers based on your environment. In this example, we’ll install the barryvdh/laravel-debugbar package which displays a pretty debug information during testing of your application.
1. Add the package to your composer.json file
"require-dev": {
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~4.0",
"phpspec/phpspec": "~2.1",
"barryvdh/laravel-debugbar": "^2.0"
}
Save the file, and do a composer update.
composer update
2. Create a new ServiceProvider called LocalServiceProvider
// file: app/Providers/LocalServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class LocalServiceProvider extends ServiceProvider
{
protected $providers = [
'Barryvdh\Debugbar\ServiceProvider'
];
protected $aliases = [
'Debugbar' => 'Barryvdh\Debugbar\Facade'
];
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//register the service providers for local environment
if ($this->app->isLocal() && !empty($this->providers)) {
foreach ($this->providers as $provider) {
$this->app->register($provider);
}
//register the alias
if (!empty($this->aliases)) {
foreach ($this->aliases as $alias => $facade) {
$this->app->alias($alias, $facade);
}
}
}
}
}
3. Add the new ServiceProvider to the config/app.php service provider list
/* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, App\Providers\LocalServiceProvider::class,
To ensure laravel detects the correct environment, you have to make sure you are specifying the correct environment in your .env file.
APP_ENV=local
Now whenever you have packages you want to use only in your local environment, you can append their service providers to the $providers array and their aliases to the $aliases array. This way, they don’t get loaded unnecessarily in your production environment.