实际应用
最后更新于:2022-04-01 15:04:53
Laravel 提供了几个机会来使用服务容器以提高应用程序的灵活性和可测试性。解析控制器是一个最主要的案例。所有的控制器都通过服务容器来进行解析,意味着你可以在控制器的构造函数中「类型指定」所需依赖,而且它们将被自动注入。
~~~
<?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]);
}
}
~~~
在这个例子中,OrderRepository 类将被自动注入到控制器中。这意味着在进行 单元测试 时,我们可以绑定一个假的 OrderRepository 到容器中来代替我们对数据库的真实操作,避免对真实数据库的影响。
使用容器的其他几个例子
当然,在上面提到过的,控制器并不是 Laravel 通过服务容器进行解析的唯一类。你也可以在路由的闭包中、过滤器中、队列任务中、事件监听器中来「类型指定」你所需要的依赖。对于在这些情境中如何使用服务容器,请参考相关文档。