使用依赖注入时实例化控制器

时间:2014-09-26 15:18:25

标签: laravel laravel-4 inversion-of-control

我刚开始使用laravel中的依赖注入。我在尝试在我的一条路线中使用我新创建的控制器时遇到了问题。

这是我的代码:

控制器:

class BuildQueueController extends BaseController {

   protected $queue;

   public function __construct(BuildQueueInterface $queue) {
      $this->queue = $queue;
   }

   public function all() {
      $ids = $this->queue->all();
      return Response::json($ids);
   }

   public function add() {
      $ids = Input::get('ids');
      try {
         foreach ($ids as $id) {
            $this->queue->add($id);
         }
      } catch (Exception $ex) {
         return Response::json(array("result" => "fail", "except" => $ex->getMessage()));
      }
      return Response::json(array("result" => "pass"));
   }

}

控制器正在按预期工作,在使用路由到控制器中的功能时,我没有遇到数据问题。

问题出现在以下代码中:

Route::get('/builder', function() {
   $queueCont = new BuildQueueController();
   $queue = $queueCont->all();

   return View::make('builder');
});

我收到错误“传递给BuildQueueController :: __ construct()的参数1必须是myclass的一个实例,没有给出”

我知道这是因为构造函数正在寻找我的接口的实例,但为了使用我的控制器,我想解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您不应该手动实例化控制器,您应该让Laravel为您执行此操作,但您应该能够使用IoC容器实例化它:

$queueCont = App::make('BuildQueueController');

在内部,它会尝试注入依赖项。