Heim > PHP-Framework > Laravel > Hauptteil

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

藏色散人
Freigeben: 2020-04-16 11:42:28
nach vorne
3091 Leute haben es durchsucht

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;
    }
}
Nach dem Login kopieren

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();
        });
    }
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren
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;;
    }
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage