Maison > cadre php > Laravel > le corps du texte

Explication détaillée de la relation entre les contrats, ServiceContainer, ServiceProvider et Facades dans Laravel

藏色散人
Libérer: 2020-04-16 11:42:28
avant
3091 Les gens l'ont consulté

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;
    }
}
Copier après la connexion

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();
        });
    }
}
Copier après la connexion

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);
}
Copier après la connexion

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 &#39;myfoo&#39;;
    }
}
Copier après la connexion

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);
}
Copier après la connexion

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!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal