Contracts
, ServiceContainer
, ServiceProvider
, Facades
1.Contracts
Le contrat, le contrat, c'est-à-dire l'interface, définit certaines règles, et tous ceux qui implémentent cette interface doivent implémenter it Méthodes à l'intérieur ;
2.ServiceContainer
, implémente Contracts
, implémentation logique spécifique
3.ServiceProvider
, le fournisseur de services de serviceContainer
, renvoie ServiceContainer
Instanciation ; pour une utilisation ailleurs, vous pouvez l'ajouter à app/config
de provider
, et il sera automatiquement enregistré dans le conteneur
4.Facades
, simplifiez la méthode d'appel de ServiceProvider
et le les méthodes dans ServiceContainer
peuvent être appelées de manière statique ;
implémente l'interface
Contracts
qui peut être écrite ou non, mais pas ici. Défini ;
définit un ServiceContainer
pour implémenter des fonctions spécifiques
namespace App\Helper; class MyFoo { public function add($a, $b) { return $a+$b; } }
définit un ServiceProvider
pour une utilisation ailleurs ServiceContain
<?php namespace App\Providers; use App\Helper\MyFoo; //要服务的Container use Illuminate\Support\ServiceProvider; use App; class MyFooServiceProvider extends ServiceProvider { public function boot(){} //注册到容器中 public function register() { //可以这么绑定,这需要use App; App::bind("myfoo",function(){ return new MyFoo(); }); //也可以这么绑定 $this->app->bind("myfoo", function(){ return new MyFoo(); }); } }
Ajoutez app/config.php
au tableau providers
dans ServiceProvider
pour permettre au système d'enregistrer automatiquement
AppProvidersMyFooServiceProvider::class
,
peut être utilisé à ce moment. Supposons que vous utilisiez
public function two($id=null) { //从系统容器中获取实例化对象 $myfoo = App::make("myfoo"); echo $myfoo->add(1,2); }
dans le contrôleur, c'est trop gênant et vous devez utiliser make
. pour récupérer l'objet. , pour plus de simplicité, vous pouvez utiliser la fonction façade, définir la façade MyFooFacade
namespace App\Facades; use Illuminate\Support\Facades\Facade; class MyFooFacade extends Facade { protected static function getFacadeAccessor() { //这里返回的是ServiceProvider中注册时,定义的字符串 return 'myfoo'; } }
et l'appeler directement dans le contrôleur
use App\Facades\MyFooFacade; public function two($id=null) { //从系统容器中获取实例化对象 $myfoo = App::make("myfoo"); echo $myfoo->add(1,2); //使用门面 echo MyFooFacade::add(4,5); }
De manière générale, après avoir personnalisé une classe, afin de faciliter son utilisation ailleurs, vous pouvez faire appel à des prestataires et des façades.
Recommandé : "tutoriel Laravel"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!