【问题标题】:How to instantiate Illuminate\Contracts\View\Factory?如何实例化 Illuminate\Contracts\View\Factory?
【发布时间】:2018-01-30 17:15:46
【问题描述】:

当我想实例化 Factory 时出现此错误。我需要实例化,因为make() 可以渲染刀片文件。

[Symfony\Component\Debug\Exception\FatalThrowableError] 不能 实例化接口 Illuminate\Contracts\View\Factory

源代码

<?php

namespace App\Core;

use Spipu\Html2Pdf\Html2Pdf;
use Spipu\Html2Pdf\Exception\Html2PdfException;
use Spipu\Html2Pdf\Exception\ExceptionFormatter;
use Illuminate\Contracts\View\Factory as ViewFactory;

class PDFGenerator
{

    private $view;

    public function __construct()
    {
        $this->view = new ViewFactory();
        $this->generatePDF();
    }

    public function generatePDF()
    {

        $html = $this->loadView('template');

    public function loadView($view, $data = array(), $mergeData = array(), $encoding = null){
        return $this->view->make($view, $data, $mergeData)->render();
    }
}

【问题讨论】:

    标签: laravel views blade factory


    【解决方案1】:

    您似乎对工厂/接口的工作方式有误解。 接口的重点是你不要实例化它,你只有方法名称和参数,所以每个实现它的类都有统一的接口。

    在这种情况下,如果你查看Illuminate\Contracts\View\Factory,你会发现这里没有真正的处理,只有代码说“好的,这就是这个方法要做的,它预期的输入和输出将被给予”。你会看到没有提到如何做,实现该接口的类是假设知道如何做的类,而不是接口。


    解决你的问题

    当您想要渲染视图时,您有 2 个选项

    1. 使用view()helper function。 (首选)
    2. 使用View中的View::make()方法Facades

    【讨论】:

    • 感谢您的启发,我已经解决了这个问题。但是您的解释帮助我更好地理解了它。
    猜你喜欢
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 2016-08-08
    • 2018-01-02
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多