Depuis que Laravel 5 a aplati de nombreuses structures spécifiques à l’environnement, une grande partie de la configuration qui était autrefois stockée dans différents répertoires de configuration pour chaque environnement a maintenant été déplacée vers .env
des dossiers.
Mais celui qui ne peut pas simplement vivre dedans .env
est la charge dépendante de l’environnement des fournisseurs de services.
Sur un projet sur lequel nous travaillons, nous souhaitons enregistrer nos gestionnaires d’erreurs auprès de fournisseurs de services, et nous souhaitons enregistrer un gestionnaire d’erreurs différent en fonction de l’environnement. Nous avons deux: ProductionErrorHandler
et VerboseErrorHandler
dont le second est destiné aux environnements de développement.
Charger les fournisseurs de services normalement
Si vous n’êtes pas familier, la définition des fournisseurs de services normaux (non spécifiques à l’environnement) se produit dans /config/app.php
. Il y a un providers
tableau là qui ressemble un peu à ceci:
'providers' => [
/*
* Laravel Framework Service Providers...
*/
'Illuminate\Foundation\Providers\ArtisanServiceProvider',
'Illuminate\Auth\AuthServiceProvider',
'Illuminate\Bus\BusServiceProvider',
...
]
Donc, si votre fournisseur de services doit être chargé dans chaque environnementil suffit de le jeter dans ce tableau et vous êtes prêt à partir.
Chargement conditionnel des prestataires de services
Cependant, si vous voulez le rendre conditionnel, vous devrez vous diriger vers /app/Providers/AppServiceProvider.php
. Ce fichier est l’endroit général où vous allez vouloir démarrer et enregistrer tout ce qui n’est pas géré par un autre fournisseur de services, c’est donc un endroit où vous pouvez aller pour enregistrer conditionnellement vos fournisseurs de services.
Voici à quoi ça ressemble en ce moment :
<?php namespace app\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register any application services.
*
* This service provider is a great spot to register your various container
* bindings with the application. As you can see, we are registering our
* "Registrar" implementation here. You can add your own bindings too!
*
* @return void
*/
public function register()
{
$this->app->bind(
'Illuminate\Contracts\Auth\Registrar',
'App\Services\Registrar'
);
}
}
Alors, faisons notre changement.
// AppServiceProvider.php
public function register()
{
$this->app->bind(
'Illuminate\Contracts\Auth\Registrar',
'App\Services\Registrar'
);
if ($this->app->environment('production')) {
$this->app->register('App\Providers\ProductionErrorHandlerServiceProvider');
} else {
$this->app->register('App\Providers\VerboseErrorHandlerServiceProvider');
}
}
$this->app->register()
configurera le fournisseur de services comme si vous l’ajoutiez à config/app.php
va, donc c’est register()
et boot()
les méthodes seront appelées aux moments appropriés.
Vous pouvez également utiliser switch
au lieu de if
, ou vous pouvez faire votre travail en fonction d’autres variables d’environnement, ou quoi que ce soit d’autre – mais c’est votre meilleur pari actuel pour charger conditionnellement les fournisseurs de services. J’espère que cela t’aides!