實(shí)際應(yīng)用

2018-02-24 15:51 更新

Laravel 提供了幾個(gè)機(jī)會(huì)來(lái)使用服務(wù)容器以提高應(yīng)用程序的靈活性和可測(cè)試性。解析控制器是一個(gè)最主要的案例。所有的控制器都通過(guò)服務(wù)容器來(lái)進(jìn)行解析,意味著你可以在控制器的構(gòu)造函數(shù)中「類型指定」所需依賴,而且它們將被自動(dòng)注入。

<?php namespace App\Http\Controllers;

use Illuminate\Routing\Controller;
use App\Repositories\OrderRepository;

class OrdersController extends Controller {

    /**
     * The order repository instance.
     */
    protected $orders;

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

    /**
     * Show all of the orders.
     *
     * @return Response
     */
    public function index()
    {
        $orders = $this->orders->all();

        return view('orders', ['orders' => $orders]);
    }

}

在這個(gè)例子中,OrderRepository 類將被自動(dòng)注入到控制器中。這意味著在進(jìn)行 單元測(cè)試 時(shí),我們可以綁定一個(gè)假的 OrderRepository 到容器中來(lái)代替我們對(duì)數(shù)據(jù)庫(kù)的真實(shí)操作,避免對(duì)真實(shí)數(shù)據(jù)庫(kù)的影響。
使用容器的其他幾個(gè)例子

當(dāng)然,在上面提到過(guò)的,控制器并不是 Laravel 通過(guò)服務(wù)容器進(jìn)行解析的唯一類。你也可以在路由的閉包中、過(guò)濾器中、隊(duì)列任務(wù)中、事件監(jiān)聽(tīng)器中來(lái)「類型指定」你所需要的依賴。對(duì)于在這些情境中如何使用服務(wù)容器,請(qǐng)參考相關(guān)文檔。

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)