En d'autres termes, les prestataires de services sont comme un entonnoir par lequel on verse du carburant "de classe" dans un réservoir appelé le "conteneur de service" d'un moteur appelé Laravel.
Si nous ouvrons config/app.php nous verrons un tableau avec le nom "provider"
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class,
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
Illuminate\Cookie\CookieServiceProvider::class,
.
.
.
],
Voici quelques-uns des fournisseurs de services fournis avec laravel, c'est-à-dire des services de base placés dans le conteneur de services.
service provider
sont-ils exécutés ?Si nous regardons la documentation cycle de vie sur demande , les fichiers suivants sont exécutés au démarrage :
public/index.php
bootstrap/app.php
app/Http/Kernel.php
et son Middlewares
Service Providers
: contenu de cet articlequi service provider
sont-ils chargés ?
Ce sont ceux definites dans le tableau config/app.php
:
return [
// ... other configuration values
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
// ... other framework providers from /vendor
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
/*
* PUBLIC Service Providers - the ones we mentioned above
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
],
];
Comme nous pouvons le voir, il existe une liste de service provider
non public dans le dossier /vendor
, nous ne devons ni les toucher ni les modifier. Ceux qui nous intéressent sont ci-dessous, avec BroadcastServicerProvider
désactivé par défaut, probablement parce qu'il est rarement utilisé.
Tous ces fournisseurs de services fonctionnent de haut en bas, répétant la liste deux fois:
register()
, utile pour (éventuellement) exécuter quelque chose de configuré avant la méthode boot()
.boot()
de tous les prestataires. Encore une fois, un par un, de haut en bas, du tableau 'providers'
.I Service Providers
inclus dans Laravel, sont tous ceux présents dans le dossier app/Providers
:
AppServiceProvider
AuthServiceProvider
BroadcastServiceProvider
EventServiceProvider
RouteServiceProvider
Ce sont toutes des classes PHP, chacune liée à son propre sujet : App
, Auth
, Broadcasting
, Events
e Routes
. Mais ils ont tous un point commun : la méthode boot()
.
Dans cette méthode, nous pouvons écrire n'importe quel code lié à l'une de ces sections : auth
, events
, route
, etc. En d'autres termes, les fournisseurs de services ne sont que des classes pour enregistrer certaines fonctionnalités globales.
Ils sont séparés en tant que "fournisseurs" car ils s'exécutent très tôt dans le cycle de vie de l'application, donc quelque chose de global est pratique ici avant que le script en cours d'exécution n'atteigne les modèles ou les contrôleurs.
La plupart des fonctionnalités sont dans le RouteServiceProvider, voici le code :
class RouteServiceProvider extends ServiceProvider
{
public const HOME = '/dashboard';
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::prefix('api')
->middleware('api')
->group(base_path('routes/api.php'));
Route::middleware('web')
->group(base_path('routes/web.php'));
});
}
protected function configureRateLimiting()
{
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
}
}
C'est la classe où les fichiers sont configurés route
avec routes/web.php
e routes/api.php
inclus par défautdefinita. Notez que pour l'API, il existe également différentes configurations : Préfixe du point de terminaison /api
et middleware api
pour tous routes
.
Nous pouvons éditer le service providers
, qui ne se trouvent pas dans le dossier /vendor
. La personnalisation de ces fichiers est effectuée lorsque vous avez de nombreux chemins et que vous souhaitez les séparer en fichiers spécifiques. Tu crées routes/auth.php
et y mettre les chemins, puis vous "activez" ce fichier dans la méthode boot()
di RouteServiceProvider
, ajoutez simplement la troisième phrase :
`Route::middleware('web') // or maybe you want another middleware?
->group(base_path('routes/auth.php'));
AppServiceProvider
c'est vide. Un exemple typique d'ajout de code AppServiceProvider
, consiste à désactiver le chargement paresseux dans Eloquent . Pour ce faire, il vous suffit ajouter deux lignes dans la méthode boot()
:
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
public function boot()
{
Model::preventLazyLoading(! $this->app->isProduction());
}
Cela lèvera une exception si un modèle de relation n'est pas chargé.
service provider
coutumeEn plus des préfichiersdefinis, nous pouvons facilement en créer un nouveau Service Provider
, liés à d'autres sujets que ceux prédefiterminé comme auth
/event
/routes
.
Un exemple assez typique est la configuration de la vue Blade
. Nous pouvons créer une directive Blade
, puis ajoutez ce code dans la méthode boot(
) de toute service provider
, y compris la valeur par défaut AppServiceProvider
. Créons maintenant un ViewServiceProvider
séparé.
Nous pouvons le générer avec cette commande :
php artisan make:provider ViewServiceProvider
Qui générera la classe si prédefifini :
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
}
Comme nous pouvons le voir à l'intérieur, il existe deux méthodes :
La méthode register() nous permet de defiTerminez les liens vers notre conteneur de services. Par exemple, dans le code suivant :
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this->app est une variable globale dans laravel à laquelle une classe singleton peut accéder via l'application.
Singleton est une fonctionnalité. Lors de l'application de cette fonctionnalité, nous informons l'application que la classe transmise en tant que paramètre dans l'application ne doit avoir qu'une seule instance dans l'ensemble de l'application. Cela signifie que MyClass sera résolu une fois et n'aura qu'une seule instance, accessible à l'aide de la variable my_class.
La méthode boot() vous permet d'accéder à tous les services précédemment enregistrés à l'aide de la méthode register. Vous pouvez ensuite inclure l'intégralité du service dans votre application à l'aide de cette méthode.
Revenant à l'exemple précédent, supprimons la méthode register()
et dans boot()
ajoutez le code de la directive Blade :
use Illuminate\Support\Facades\Blade;
public function boot()
{
Blade::directive('datetime', function ($expression) {
return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
});
}
Un autre exemple de ViewServiceProvider
ce qui concerne View Composers
, voici l'extrait du site officiel de Laravel :
use App\View\Composers\ProfileComposer;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class ViewServiceProvider extends ServiceProvider
{
public function boot()
{
// Using class based composers...
View::composer('profile', ProfileComposer::class);
// Using closure based composers...
View::composer('dashboard', function ($view) {
//
});
}
}
Pour s'exécuter, ce nouveau fournisseur doit être ajouté/enregistré dans le tableau du fournisseur config/app.php
:
return [
// ... other configuration values
'providers' => [
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
// Add your provider here
App\Providers\ViewServiceProvider::class,
],
];
Ercole Palmeri
Ils pourraient également être intéressés par:
Microsoft Excel est l'outil de référence en matière d'analyse de données, car il propose de nombreuses fonctionnalités pour organiser des ensembles de données,…
Walliance, SIM et plateforme parmi les leaders en Europe dans le domaine du Crowdfunding Immobilier depuis 2017, annonce la finalisation…
Filament est un framework de développement Laravel « accéléré », fournissant plusieurs composants full-stack. Il est conçu pour simplifier le processus de…
«Je dois revenir pour achever mon évolution : je vais me projeter à l'intérieur de l'ordinateur et devenir une pure énergie. Une fois installé…
Google DeepMind présente une version améliorée de son modèle d'intelligence artificielle. Le nouveau modèle amélioré offre non seulement…
Laravel, célèbre pour sa syntaxe élégante et ses fonctionnalités puissantes, constitue également une base solide pour l'architecture modulaire. Là…
Cisco et Splunk aident leurs clients à accélérer leur transition vers le centre d'opérations de sécurité (SOC) du futur avec…
Les ransomwares ont dominé l’actualité ces deux dernières années. La plupart des gens savent bien que les attaques…