fournisseur de services
- Méthodes d'enregistrement
- Caractéristiques des liaisons et des singletons
- Méthode Bootstrap
- Méthode de démarrage injection de dépendance Service d'enregistrement fournisseur
- Fournisseur retardé Prestataire de services
-
- Introduction
- Les fournisseurs de services sont le centre d'amorçage de toutes les applications Laravel. Votre application, ainsi que les principaux services Laravel démarrés via le serveur, sont démarrés via des fournisseurs de services. Mais que signifie « orientation » ? Habituellement, le nôtre peut être compris comme
- Inscription, comme l'enregistrement des liaisons de conteneurs de services, des écouteurs d'événements, du middleware et même du routage. Les fournisseurs de services jouent un rôle central dans la configuration des applications. Lorsque vous ouvrez le fichier
config/app.php
de Laravel, vous verrez le tableauproviders
. Le contenu du tableau correspond aux classes de tous les fournisseurs de services à charger par l'application. Bien sûr, il existe de nombreux fournisseurs « paresseux », qui ne sont pas chargés à chaque demande, mais uniquement lorsque leurs services sont réellement nécessaires. Dans cet article, vous apprendrez comment écrire votre propre fournisseur de services et l'enregistrer dans votre application Laravel - Writing Service Provider Tous les fournisseurs de services hériteront du Classe
IlluminateSupportServiceProvider
. La plupart des fournisseurs de services contiennent unregister
et une méthodeboot
. Dans la méthoderegister
, vous liez simplement l'objet au conteneur de service. N'essayez pas d'enregistrer des écouteurs, des routes ou toute autre fonction dans la méthoderegister
- Fournisseur de retard
make:provider
commande Fourni par : php artisan make:provider RiakServiceProvider
Méthode Register
Comme mentionné ci-dessus, dans la méthode register
, il vous suffit aux services sont liés dans des conteneurs de services. N'essayez pas d'enregistrer des écouteurs, des routes ou toute autre fonctionnalité dans la méthode register
. Sinon, vous risquez d'utiliser accidentellement les services d'un fournisseur de services qui n'a pas encore été chargé.
Prenons le cas d’un fournisseur de services de base. Dans n'importe quelle méthode de fournisseur de services, vous accédez toujours au conteneur de services via l'attribut $app
:
<?php namespace App\Providers;use Riak\Connection; use Illuminate\Support\ServiceProvider; class RiakServiceProvider extends ServiceProvider{ /** * 在服务容器里注册 * * @return void */ public function register() { $this->app->singleton(Connection::class, function ($app) { return new Connection(config('riak')); }); } }
Ce conteneur de services définit simplement une méthode Si votre fournisseur de services enregistre de nombreuses liaisons simples, vous souhaiterez peut-être utiliser des 如果你的服务提供器注册了许多简单的绑定,你可能想用 如果我们要在服务提供者中注册一个 视图合成器 该怎么做? 这就需要用到 你可以为服务提供者的 所有服务提供者都是通过配置文件 要注册提供器,只需要将其添加到数组: 如果你的服务提供者 只 在 服务容器 中注册,可以选择延迟加载该绑定直到注册绑定的服务真的需要时再加载,延迟加载这样的一个提供者将会提升应用的性能,因为它不会在每次请求时都从文件系统加载。 Laravel 编译并保存延迟服务提供者提供的所有服务的列表,以及其服务提供者类的名称。因此,只有当你在尝试解析其中一项服务时,Laravel 才会加载服务提供者。 要延迟加载提供者,需要实现 Vous pouvez définir des indications de type pour la méthode register
et utilise cette méthode. une interface RiakConnection
dans le conteneur de services. Si vous ne comprenez pas comment fonctionne un conteneur de services, consultez sa documentation. Caractéristiques des
bindings
et des singletons
bindings
et Propriétés singletons
au lieu d'enregistrer manuellement chaque liaison de conteneur. Lorsque le fournisseur de services est chargé par le framework, ces propriétés sont automatiquement vérifiées et les liaisons correspondantes sont enregistrées bindings
和 singletons
的特性bindings
和 singletons
属性替代手动注册每个容器绑定。当服务提供器被框架加载时,将自动检查这些属性并注册相应的绑定<?php
namespace App\Providers;
use App\Contracts\ServerProvider;
use App\Contracts\DowntimeNotifier;
use Illuminate\Support\ServiceProvider;
use App\Services\PingdomDowntimeNotifier;
use App\Services\DigitalOceanServerProvider;
class AppServiceProvider extends ServiceProvider{
/**
* 设定所有的容器绑定的对应关系
*
* @var array
*/
public $bindings = [
ServerProvider::class => DigitalOceanServerProvider::class,
];
/**
* 设定所有的单例模式容器绑定的对应关系
*
* @var array
*/
public $singletons = [
DowntimeNotifier::class => PingdomDowntimeNotifier::class,
];
}
引导方法
boot
方法了。 该方法在所有服务提供者被注册以后才会被调用, 这就是说我们可以在其中访问框架已注册的所有其它服务:<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider{
/**
* 启动所有的应用服务。
*
* @return void
*/
public function boot()
{
view()->composer('view', function () {
//
});
}
}
启动方法的依赖注入
boot
方法设置类型提示。 服务容器 会自动注入你所需要的依赖:use Illuminate\Contracts\Routing\ResponseFactory;
public function boot(ResponseFactory $response){
$response->macro('caps', function ($value) {
//
});
}
注册服务提供者
config/app.php
进行注册。该文件包含了一个列出所有服务提供者名字的 providers
数组,默认情况下,其中列出了所有核心服务提供者,这些服务提供者启动 Laravel 核心组件,比如邮件、队列、缓存等等。'providers' => [ // 其他服务提供者 App\Providers\ComposerServiceProvider::class,],
延迟提供者
IlluminateContractsSupportDeferrableProvider
接口并置一个 provides
方法。这个 provides
<?php
namespace App\Providers;
use Riak\Connection;
use Illuminate\Support\ServiceProvider;
use Illuminate\Contracts\Support\DeferrableProvider;
class RiakServiceProvider extends ServiceProvider implements DeferrableProvider{
/**
* 注册服务提供者。
*
* @return void
*/
public function register()
{
$this->app->singleton(Connection::class, function ($app) {
return new Connection($app['config']['riak']);
});
}
/**
* 获取由提供者提供的服务。
*
* @return array
*/
public function provides()
{
return [Connection::class];
}
}
Méthode de démarrage
< p >Et si nous voulons enregistrer un compositeur de vues auprès du fournisseur de services ? Cela nécessite l'utilisation de la méthode boot
. Cette méthode ne sera appelée que lorsque tous les fournisseurs de services seront enregistrés, ce qui signifie que nous pouvons accéder à tous les autres services enregistrés par le framework : rrreeeDémarrer l'injection de dépendances de méthode boot
d'un fournisseur de services. Le conteneur de services injectera automatiquement les dépendances dont vous avez besoin :
Enregistrement des fournisseurs de services
Tous les fournisseurs de services sont configurés via le fichier config/app.php
pour vous inscrire. Ce fichier contient un tableau providers
qui répertorie les noms de tous les fournisseurs de services. Par défaut, tous les fournisseurs de services principaux sont répertoriés. Ces fournisseurs de services démarrent les composants principaux de Laravel, tels que la messagerie et les files d'attente, le cache, etc. . 🎜
Pour enregistrer un fournisseur, ajoutez-le simplement au tableau : 🎜rrreee