在 laravel 控制器构造函数中注入模型
inject model in laravel controllers constructor
我想知道以这种方式在控制器中使用我的模型 class 是否是一个好习惯:
public function __construct(Rule $rules)
{
$this->rules = $rules;
}
我不想在我的控制器中重复自己,所以我想知道最好的方法是什么
您使用依赖注入 - 这是非常好的做法。
根据文档:
依赖注入是一个奇特的短语,本质上意味着:class 依赖项通过构造函数 "injected" 进入 class,或者在某些情况下,"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]);
}
}
在此示例中,UserController 需要从数据源中检索用户。因此,我们将注入一个能够检索用户的服务。在这种情况下,我们的 UserRepository 很可能使用 Eloquent 从数据库中检索用户信息。然而,由于存储库是注入的,我们可以很容易地用另一个实现替换它。我们还可以轻松 "mock",或者在测试我们的应用程序时创建 UserRepository 的虚拟实现。
另请阅读有关服务容器的信息 - 它是一个强大的工具:
https://laravel.com/docs/5.6/container
在控制器中注入模型是一种很好的做法,但是,推荐的方法是:
- 在你的控制器文件的顶部有一个 use 语句
- 在需要访问模型的函数中实现它,我不建议您在控制器中实现它
- 如果您查看文档,您将能够将模型直接绑定到您的路线并消除 Model::find(id) https://laravel.com/docs/5.6/routing#route-model-binding
的一些麻烦
建议在使用其他 类 时使用您提供的构造函数方法,例如存储库、单例或您希望注入的任何功能,请参阅文档以获取更多信息:https://laravel.com/docs/5.6/container
希望对您有所帮助
我想知道以这种方式在控制器中使用我的模型 class 是否是一个好习惯:
public function __construct(Rule $rules)
{
$this->rules = $rules;
}
我不想在我的控制器中重复自己,所以我想知道最好的方法是什么
您使用依赖注入 - 这是非常好的做法。
根据文档: 依赖注入是一个奇特的短语,本质上意味着:class 依赖项通过构造函数 "injected" 进入 class,或者在某些情况下,"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]);
}
}
在此示例中,UserController 需要从数据源中检索用户。因此,我们将注入一个能够检索用户的服务。在这种情况下,我们的 UserRepository 很可能使用 Eloquent 从数据库中检索用户信息。然而,由于存储库是注入的,我们可以很容易地用另一个实现替换它。我们还可以轻松 "mock",或者在测试我们的应用程序时创建 UserRepository 的虚拟实现。
另请阅读有关服务容器的信息 - 它是一个强大的工具: https://laravel.com/docs/5.6/container
在控制器中注入模型是一种很好的做法,但是,推荐的方法是:
- 在你的控制器文件的顶部有一个 use 语句
- 在需要访问模型的函数中实现它,我不建议您在控制器中实现它
- 如果您查看文档,您将能够将模型直接绑定到您的路线并消除 Model::find(id) https://laravel.com/docs/5.6/routing#route-model-binding 的一些麻烦
建议在使用其他 类 时使用您提供的构造函数方法,例如存储库、单例或您希望注入的任何功能,请参阅文档以获取更多信息:https://laravel.com/docs/5.6/container
希望对您有所帮助