依赖注入
Laravel 服务容器是一个用于管理类依赖以及实现依赖注入的强有力工具。依赖注入这个名词表面看起来花哨,实质上是指:通过构造函数,或者某些情况下通过「setter」方法将类依赖「注入」到类中。
在此示例中, 深入理解服务容器,对于构建一个强大的、大型的应用,以及对 Laravel 核心本身的贡献都是至关重要的。<?php
namespace App\Http\Controllers;use App\Http\Controllers\Controller;
use App\Repositories\UserRepository;
use App\Models\User;
class UserController extends Controller{
/**
* user 仓库的实现
*
* @var UserRepository
*/
protected $users;
/**
* 创建一个新的控制器实例
*
* @param UserRepository $users
* @return void
*/
public function __construct(UserRepository $users)
{
$this->users = $users;
}
/**
* 展示给定用户的信息
*
* @param int $id
* @return Response
*/
public function show($id)
{
$user = $this->users->find($id);
return view('user.profile', ['user' => $user]);
}}
UserController
控制器需要从数据源中获取 users
。 因此,我们可以注入一个能够获取 users 的服务。 在这种情况下,我们的存储仓库 UserRepository
极有可能使用 Eloquent 从数据库中检索用户信息。 然而,由于仓库是通过 UserRepository 注入的,我们可以轻易的将其切换为另一个实现。 另外,这种方式的便利之处也体现在:当需要为应用编写测试的时候,我们也可以很轻松地 “模拟” 或者创建一个 UserRepository 存储层的伪实现来操作。