【发布时间】:2021-07-12 03:35:00
【问题描述】:
一段时间以来,我一直在将我的项目从 CodeIgniter3 移植到 CodeIgniter4。我现在正处于我想以 PDF 格式吐出一些信息的阶段。我曾经在 CI3 中使用 dompdf 库没有任何问题。我在 CI4 中撞到了一堵混凝土墙。
我按照this tutorial 中的说明完成了步骤 1 到 4,但存在以下偏差
在app/Config/Autoload.php中,我是这样注册dompdf服务的:
public $psr4 = [
APP_NAMESPACE => APPPATH, // For custom app namespace
'Config' => APPPATH . 'Config',
//'Dompdf' => APPPATH . 'ThirdParty/dompdf/src',
//not like this ^^^
'Dompdf' => APPPATH . 'ThirdParty/vendor/dompdf/dompdf/src', <-- like this
];
我的控制器看起来像这样
<?php
namespace App\ThirdParty;
namespace App\Controllers;
use Dompdf\Dompdf;
use CodeIgniter\Controller;
class AjaxDomPDF extends Controller
{
function htmlToPDF($view){
$dompdf = new \Dompdf\Dompdf();
$dompdf->loadHtml(view($view));
$dompdf->setPaper('A4', 'landscape');
$dompdf->render();
$dompdf->stream();
}
}
我在 app/Config/Routes.php 文件中的路由条目是
$routes->get('generatePDF/(:segment)', 'AjaxDomPDF::htmlToPDF/$1');
有了这个安排,我得到了错误
找不到类“Dompdf\Cpdf”
我觅食并the best solution seemed to be this,因此我将控制器编辑为如下所示
<?php
namespace App\ThirdParty;
namespace App\Controllers;
require 'vendor/autoload.php';
require 'vendor/dompdf/dompdf/lib/Cpdf.php';
use Dompdf\Dompdf;
// disable DOMPDF's internal autoloader if you are using Composer
define('DOMPDF_ENABLE_AUTOLOAD', false);
define("DOMPDF_ENABLE_REMOTE", true);
// include DOMPDF's default configuration
require_once 'vendor/dompdf/dompdf/dompdf_config.inc.php';
use CodeIgniter\Controller;
class AjaxDomPDF extends Controller
{
function htmlToPDF($view){
$dompdf = new \Dompdf\Dompdf();
$dompdf->loadHtml(view($view));
$dompdf->setPaper('A4', 'landscape');
$dompdf->render();
$dompdf->stream();
}
}
有了这个我现在得到错误
require(vendor/autoload.php):打开流失败:没有这样的文件或目录
我搜索并找到了this similar question,但到目前为止没有答案,似乎解决了我的问题。
【问题讨论】:
-
你是如何安装这些包的?使用
composer install? -
是的!我用作曲家。我发出了命令'composer require dompdf/dompdf'
-
你尝试过什么来解决这个错误?这些文件安装在哪里?
-
我完全被卡住了!我不明白为什么解析器说文件不存在。给出的路径是正确的,文件在那里。
-
我遇到了a similar problem for someone 并注意到他们将 APPPATH 常量预先挂在控制器中提到的文件的相对路径中。这行得通!所以 > 需要 'vendor/autoload.php';变为 > 需要 APPPATH.'vendor/autoload.php';现在我不认为这是答案,因为我不知道为什么明显正确的相对路径不起作用。如果有人可以解释这一点,那就应该是答案。
标签: php codeigniter-3 dompdf codeigniter-4