契約
、サービスコンテナ
、サービスプロバイダ
、ファサード
1.契約
契約、コントラクト、つまりインターフェイスはいくつかのルールを定義しており、このインターフェイスを実装する人は全員、内部のメソッドを実装する必要があります;
2.ServiceContainer
、Contracts
を実装します。 、特に論理実装。
のサービス プロバイダーである 3.
ServiceProvider
は、他の場所で使用するために ServiceContainer
のインスタンス化を返します。これを app/config
の provider
に追加すると、自動的にコンテナーに登録されます;
4.Facades
、simplifyServiceProvider
メソッドを呼び出し、ServiceContainer
;
implementation
# のメソッドを静的に呼び出すことができます。 ##Contractsインターフェースは記述してもしなくてもよく、ここでは定義されません;
ServiceContainer を定義します
namespace App\Helper; class MyFoo { public function add($a, $b) { return $a+$b; } }
他の場所で使用するための
ServiceProvider を定義します
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(); }); } }
##ServiceProvider を #app/config.php
の providers
配列に追加して、システムが
,
現時点では使えるのでコントローラーで使うとする
public function two($id=null) { //从系统容器中获取实例化对象 $myfoo = App::make("myfoo"); echo $myfoo->add(1,2); }
面倒すぎる
make オブジェクトを取得するには、簡単にするために、ファサード関数を使用して、ファサードを定義します。 MyFooFacade
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class MyFooFacade extends Facade
{
protected static function getFacadeAccessor()
{
//这里返回的是ServiceProvider中注册时,定义的字符串
return &#39;myfoo&#39;;
}
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
そして、それをコントローラーで直接呼び出すことができます
use App\Facades\MyFooFacade; public function two($id=null) { //从系统容器中获取实例化对象 $myfoo = App::make("myfoo"); echo $myfoo->add(1,2); //使用门面 echo MyFooFacade::add(4,5); }
一般に、クラスをカスタマイズした後、他の場所での使用を容易にするために、サービスを使用できます。プロバイダーとファサード。
推奨: 「
laravel チュートリアル以上がlaravelにおけるContracts、ServiceContainer、ServiceProvider、Facadeの関係を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。