Heim  >  Artikel  >  PHP-Framework  >  Detaillierte Erläuterung der Beziehung zwischen Verträgen, ServiceContainer, ServiceProvider und Fassaden in Laravel

Detaillierte Erläuterung der Beziehung zwischen Verträgen, ServiceContainer, ServiceProvider und Fassaden in Laravel

藏色散人
藏色散人nach vorne
2020-04-16 11:42:283009Durchsuche

Contracts, ServiceContainer, ServiceProvider, Facades 

1.Contracts Vertrag, Vertrag, also Schnittstelle, definiert einige Regeln, und jeder, der diese Schnittstelle implementiert, muss sie implementieren it Methoden im Inneren;

2.ServiceContainer, implementiert Contracts

3.

, der Dienstanbieter von ServiceProvider, gibt serviceContainer Instanziierung zurück Zur Verwendung an anderer Stelle können Sie es zu ServiceContainer von app/config hinzufügen und es wird automatisch im Container provider

4.

registriert, die Aufrufmethode von Facades vereinfachen Methoden in ServiceProvider können statisch aufgerufen werden; ServiceContainer

implementiert die Schnittstelle

, die geschrieben oder nicht geschrieben werden kann, aber nicht Hier definiert;

Definieren Sie ein Contracts, um bestimmte Funktionen zu implementieren

namespace App\Helper;
class MyFoo
{
    public function add($a, $b)
    {
        return $a+$b;
    }
}

ServiceContainer

Fügen Sie

zum Array

hinzu 🎜> um das System automatisch registrieren zu lassen

ServiceProviderServiceContain,

kann zu diesem Zeitpunkt verwendet werden. Angenommen, Sie verwenden

<?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();
        });
    }
}

app/config.php providers im Controller ist zu mühsam. Sie müssen auch ServiceProvider verwenden, um das Objekt zu erhalten. Der Einfachheit halber können Sie die Fassade

public function two($id=null)
{
    //从系统容器中获取实例化对象
    $myfoo = App::make("myfoo");
    echo $myfoo->add(1,2);
}
AppProvidersMyFooServiceProvider::class verwenden 🎜>

und rufen Sie es direkt im Controller auf

namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class MyFooFacade extends Facade
{
    protected static function getFacadeAccessor()
    {
        //这里返回的是ServiceProvider中注册时,定义的字符串
        return &#39;myfoo&#39;;
    }
}

Im Allgemeinen können Sie eine Klasse nach dem Anpassen verwenden, um ihre Verwendung an anderer Stelle zu erleichtern Dienstleister und Fassaden.

makeEmpfohlen: „MyFooFacadeLaravel-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Beziehung zwischen Verträgen, ServiceContainer, ServiceProvider und Fassaden in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen