基本用法

2018-02-24 15:51 更新

綁定

幾乎你所有服務容器將與已注冊的服務提供者綁定,這些例子都在情境(context)使用容器做說明,如果應用程序其它地方需要容器實例,如工廠(factory),能以類型提示 Illuminate\Contracts\Container\Container 注入一個容器實例。另外,你可以使用 App facade 訪問容器。

注冊基本解析器

在一個服務提供者內(nèi)部,你總是可以通過 $this->app 實例變量來訪問到容器。

在服務提供者里,總是通過 $this->app 實例變量使用容器。

服務容器注冊依賴有幾種方式,包括閉包回調(diào)和綁定實例的接口。首先,我們來探討閉包回調(diào)的方式。被注冊至容器的閉包解析器包含一個 key (通常用類名稱) 和一個有返回值的閉包:

$this->app->bind('FooBar', function($app)
{
    return new FooBar($app['SomethingElse']);
});

注冊一個單例

有時候,你可能希望綁定到容器的對象只會被解析一次,之后的調(diào)用都返回相同的實例:

$this->app->singleton('FooBar', function($app)
{
    return new FooBar($app['SomethingElse']);
});

綁定一個已經(jīng)存在的實例

你也可以使用 instance 方法,綁定一個已經(jīng)存在的實例到容器,接下來將總是返回該實例:

$fooBar = new FooBar(new SomethingElse);

$this->app->instance('FooBar', $fooBar);

解析

從容器解析出實例有幾種方式。
一、可以使用 make 方法:

$fooBar = $this->app->make('FooBar');

二、你可以像「訪問數(shù)組」一樣對容器進行訪問,因為它實現(xiàn)了PHP的 ArrayAccess 接口:

$fooBar = $this->app['FooBar'];

最后,也是最重要的一點,你可以在構造函數(shù)中簡單地「類型指定(type-hint)」你所需要的依賴,包括在控制器、事件監(jiān)聽器、隊列任務,過濾器等等之中。容器將自動注入你所需的所有依賴:

<?php namespace App\Http\Controllers;

use Illuminate\Routing\Controller;
use App\Users\Repository as UserRepository;

class UserController extends Controller {

    /**
     * The user repository instance.
     */
    protected $users;

    /**
     * Create a new controller instance.
     *
     * @param  UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        $this->users = $users;
    }

    /**
     * Show the user with the given ID.
     *
     * @param  int  $id
     * @return Response
     */
    public function show($id)
    {
        //
    }

}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號