Laravel 8 Dependency Injection的完整指南

271 阅读2分钟

依赖注入这个短语必然是指通过构造函数或在某些情况下通过 "setter"方法**"注入 "** 到一个类中的类依赖关系。我们可以将类注入到另一个类的构造函数中,然后得到该类的对象,通过该对象,我们可以访问其方法属性

Laravel依赖性注入

Laravel的服务容器是一个依赖注入容器,也是一个应用程序的注册表。 Laravel容器是一个强大的工具,用于管理依赖关系和存储对象的各种用途; 例如; 你可以存储对象并在Facades中使用它们.

依赖性注入是常用的,即使是请求访问,我们大多是注入:

public function __construct(Request $request)

让我们看看表面之下,因为了解事物的工作原理总是比记住它们要好。

当你把对象注入到你的中时, Container使用Reflection API来检查你的构造方法并检索你所定义的依赖关系.

什么是Laravel的Reflection API

反射被定义为一个程序在执行时检查自己并修改其逻辑的能力。

PHP 5有一个完整的反射API,增加了逆向工程类,接口,函数,方法,和扩展的能力。

此外,反射 API 还提供了检索函数、类和方法的文档注释的方法。

反射在PHP中是很普遍的。然而,在一些情况下,即使你不知道也可能会用到它。

PHP的一些内置函数间接地使用了反射API,call_user_func函数。

我们将通过一个例子来了解。

第一步: 安装Laravel项目

输入以下命令:

composer create-project laravel/laravel DI --prefer-dist

现在, 配置数据库:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=di
DB_USERNAME=root
DB_PASSWORD=mysql

现在, 我们需要为用户表添加种子

键入下面的命令:

php artisan make:seeder UsersTableSeeder

第二步: 编写查询和种子表

<?php

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
         DB::table('users')->insert([
            'name' => str_random(10),
            'email' => str_random(10).'@gmail.com',
            'password' => bcrypt('secret'),
        ]);
          DB::table('users')->insert([
            'name' => str_random(10),
            'email' => str_random(10).'@gmail.com',
            'password' => bcrypt('secret'),
        ]);
           DB::table('users')->insert([
            'name' => str_random(10),
            'email' => str_random(10).'@gmail.com',
            'password' => bcrypt('secret'),
        ]);
            DB::table('users')->insert([
            'name' => str_random(10),
            'email' => str_random(10).'@gmail.com',
            'password' => bcrypt('secret'),
        ]);
             DB::table('users')->insert([
            'name' => str_random(10),
            'email' => str_random(10).'@gmail.com',
            'password' => bcrypt('secret'),
        ]);
    }
}

在你的终端中键入以下命令:

php artisan db:seed

它将为我们的表创建行。

第三步:依赖性注入代码

通过输入以下命令,建立一个名为UserController的控制器:

php artisan make:controller UserController --resource

此外,我们还需要为我们的应用程序制作一个web路由。

因此,在web.php文件中,写下以下一行代码:

Route::get('/users', 'UserController@index');

我们需要在UserController.php文件中包含我们的User.php模型:

use App\User;

我们还需要为该类写构造函数,以注入依赖关系:

/**
     * The user repository implementation.
     *
     * @var UserRepository
     */
    protected $users;

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

index()函数中,写下以下几行代码:

/**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $id = 2;
        $user = $this->users->find($id);
        return $user;
    }

在现实生活中,我们需要传递**$id**作为该函数的参数,但这是一个演示,所以这里不需要。

现在, 通过输入以下命令来启动laravel服务器:

php artisan serve

点击下面的网址:

http://localhost:8000/users

你会看到像这样的输出:

{
 "id": 2,
 "name": "qvzbXlneUl",
 "email": "W4PvNyLAdX@gmail.com",
 "created_at": null,
 "updated_at": null
}

所以, 我们已经成功地将类注入到构造函数中, 并制作了一个该模型的对象, 通过这个对象, 我们现在可以访问它的方法并显示数据库中的数据。

在Laravel中, 你也可以直接将类注入到它的方法中, 在那个时候, 你甚至不需要建立对象; laravel会通过 Resolution API为你制作:

/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
 public function index(User $users)
 {
   $id = 2;
   $user = $users->find($id);
   return $user;
 }

本教程到此结束.

另见

Laravel http测试

laravel artisan

laravel的闸门

Laravel queues

Laravel混合