在 Laravel 控制器构造函数中注入模型

Moh*_*ian 7 php design-patterns coding-style laravel

我想知道以这种方式在控制器中使用我的模型类是否是一个好习惯:

public function __construct(Rule $rules)
{
    $this->rules = $rules;
}
Run Code Online (Sandbox Code Playgroud)

我不想在我的控制器中重复自己,所以我想知道什么是最好的方法

Ada*_*ski 5

您使用依赖注入 - 这是非常好的实践。

根据文档:依赖注入是一个奇特的短语,本质上意味着:类依赖项通过构造函数或在某些情况下通过“setter”方法“注入”到类中。

namespace App\Http\Controllers;

use App\User;
use App\Repositories\UserRepository;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * The user repository implementation.
     *
     * @var UserRepository
     */
    protected $users;

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

    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return Response
     */
    public function show($id)
    {
        $user = $this->users->find($id);

        return view('user.profile', ['user' => $user]);
    }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,UserController 需要从数据源检索用户。因此,我们将注入一个能够检索用户的服务。在这种情况下,我们的 UserRepository 最有可能使用 Eloquent 从数据库中检索用户信息。然而,由于存储库是注入的,我们可以轻松地将其替换为另一个实现。在测试我们的应用程序时,我们还可以轻松地“模拟”或创建 UserRepository 的虚拟实现。

另请阅读有关服务容器的信息 - 它是强大的工具: https ://laravel.com/docs/5.6/container