[英]laravel - dependency injection and the IoC Container
我试图围绕依赖注入和IoC容器,我正在使用我的UserController作为示例。 我正在定义UserController在其构造函数中所依赖的内容,然后使用App :: bind()将这些对象绑定到它。 如果我正在使用Input :: get()facade / method / thing我没有利用我刚刚注入的Request对象? 我是否应该使用以下代码,现在注入Request对象或者doInput :: get()解析为同一个Request实例? 我想使用静态外墙,但如果他们决定解除未注入的物体,则不会。
$this->request->get('email');
依赖注入
<?php
App::bind('UserController', function() {
$controller = new UserController(
new Response,
App::make('request'),
App::make('view'),
App::make('validator'),
App::make('hash'),
new User
);
return $controller;
});
UserController的
<?php
class UserController extends BaseController {
protected $response;
protected $request;
protected $validator;
protected $hasher;
protected $user;
protected $view;
public function __construct(
Response $response,
\Illuminate\Http\Request $request,
\Illuminate\View\Environment $view,
\Illuminate\Validation\Factory $validator,
\Illuminate\Hashing\BcryptHasher $hasher,
User $user
){
$this->response = $response;
$this->request = $request;
$this->view = $view;
$this->validator = $validator;
$this->hasher = $hasher;
$this->user = $user;
}
public function index()
{
//should i use this?
$email = Input::get('email');
//or this?
$email = $this->request->get('email');
//should i use this?
return $this->view->make('users.login');
//or this?
return View::make('users.login');
}
如果您担心可测试性问题,那么您应该只注入未通过外观路由的实例,因为外观本身已经可测试(意味着您可以在L4中模拟这些)。 您不需要注入响应,哈希,查看环境,请求等。从它的外观来看,您只需要注入$user
。
对于其他一切,我只是坚持使用静态外观。 查看基本Facade
类上的swap
和shouldReceive
方法。 您可以使用自己的模拟对象轻松地交换基础实例,或者只是使用View::shouldReceive()
开始View::shouldReceive()
。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.