Laravel错误:目标[Illuminate \ View \ Engines \ EngineInterface]不可实例化

时间:2015-01-20 10:35:21

标签: php laravel

我正在创建一个抽象类,它将使用Laravel的View类获取视图的内容。但是当我尝试从扩展它的类运行方法时,我收到以下错误:

Illuminate \ Container \ BindingResolutionException
Target [Illuminate\View\Engines\EngineInterface] is not instantiable.

这是我的代码:

PdfReport.php     

use Illuminate\View\View as View;

abstract class PdfReport {

  private $view;

  function __construct(View $view)
  {
      $this->view = $view;
  }

  public function render($reportView, $report)
  {
      $this->view->make('report.pdf.' . $reportView, ['report' => $report])->render();
  }

}

EslReport.php

<?php namespace Reports\PdfReports;

class EslPdfReport extends PdfReport {

    public function renderReport($report)
    {
        return $this->render('esl', $report);
    }

}

然后我在 routes.php 中运行我的代码用于测试目的,如下所示:

use Reports\PdfReports\EslPdfReport;

Route::get('pdftest', array(    
    'as' => 'pdftest',
        function(){
            $eslReport = App::make('Reports\PdfReports\EslPdfReport');
            $eslReport->renderReport(EslReport::find(1));
        }
));

我不太了解我是否在抽象类中对视图的依赖注入做错了什么,它对我来说都是很新的概念,所以任何帮助都是最重要的赞赏。

此外,我在laracasts论坛上提出这个问题是否有帮助:https://laracasts.com/discuss/channels/general-discussion/confusion-about-constructors-in-abstract-classes

1 个答案:

答案 0 :(得分:1)

而不是Illuminate\View\View您需要注入Illuminate\View\Factory

use Illuminate\View\Factory as View;

Here's a reference外观类以及使用DI

时需要使用的实际底层类