limengxun的网站

controller-about

依赖注入

By admin on 2022-12-31 00:31:11

Laravel 服务容器是一个用于管理类依赖以及实现依赖注入的强有力工具。依赖注入这个名词表面看起来花哨,实质上是指:通过构造函数,或者某些情况下通过「setter」方法将类依赖「注入」到类中。

<?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 存储层的伪实现来操作。

深入理解服务容器,对于构建一个强大的、大型的应用,以及对 Laravel 核心本身的贡献都是至关重要的。