Laravel error: Target [Illuminate\View\Engines\EngineInterface] is not instantiable
Laravel error: Target [Illuminate\View\Engines\EngineInterface] is not instantiable
我正在创建一个摘要 class,它将使用 Laravel 的视图 class 获取视图的内容。但是我在尝试 运行 来自 class 的方法时遇到以下错误:
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));
}
));
如果我在抽象视图的依赖注入中做错了什么,我不太明白 class,这对我来说都是非常新的概念,所以任何帮助将不胜感激。
我也在 laracasts 论坛上问了这个问题是否有帮助:https://laracasts.com/discuss/channels/general-discussion/confusion-about-constructors-in-abstract-classes
而不是 Illuminate\View\View
你需要注入 Illuminate\View\Factory
:
use Illuminate\View\Factory as View;
Here's a reference of facade classes 以及使用 DI
时需要使用的实际底层 class
我正在创建一个摘要 class,它将使用 Laravel 的视图 class 获取视图的内容。但是我在尝试 运行 来自 class 的方法时遇到以下错误:
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));
}
));
如果我在抽象视图的依赖注入中做错了什么,我不太明白 class,这对我来说都是非常新的概念,所以任何帮助将不胜感激。
我也在 laracasts 论坛上问了这个问题是否有帮助:https://laracasts.com/discuss/channels/general-discussion/confusion-about-constructors-in-abstract-classes
而不是 Illuminate\View\View
你需要注入 Illuminate\View\Factory
:
use Illuminate\View\Factory as View;
Here's a reference of facade classes 以及使用 DI
时需要使用的实际底层 class