在我的控制器中,我想要一个函数来使用mpdf
,例如
public function actionPdf(){
include("MPDF57/mpdf.php");
$mpdf=new mPDF('c');
$mpdf->SetDisplayMode('fullpage');
$mpdf->WriteHTML("<h1>Hello World!</h1>");
$mpdf->Output('filename.pdf', 'F');
}
}
这不起作用,并抛出错误:
找不到类'app \ controllers \ mPDF'
如果我想自动加载课程
,我该怎么办?(a)中。仅适用于此控制器操作
(b)中。只需使用use
语句就可以在任何地方使用它。
我知道它必须对namespaces
执行某些操作,但不知道如何定义命名空间,以及在何处放置此MPDF57
文件夹,然后使其可访问。
我也试过这个:
$name = "MPDF57/mpdf.php";
spl_autoload_register(function ($name) {
var_dump($name);
});
但这也不起作用。当我调用控制器Action时抛出相同的错误。
这里是命名空间声明和use
语句:
namespace app\controllers;
use Yii;
use app\models\Regs;
use app\models\Voters;
use app\models\RegsSearch;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use \yii\web\Response;
use yii\helpers\Html;
use kartik\mpdf\Pdf;
答案 0 :(得分:0)
Yii已经有了自动加载器,你无需加载课程。 只需使用正确的命名空间创建您的类,它将被加载到您只在哪里使用它。
Namspace应该代表PHP文件的真实路径。 PHP文件名和类名应该相同。
答案 1 :(得分:-1)
您应该只使用mpdf/mpdf包:
使用composer安装它:
composer require "mpdf/mpdf" ">=6.0.0"
像这样使用:
$mpdf = new \mPDF();
或者你可以像这样使用yii2扩展名:https://github.com/kartik-v/yii2-mpdf
答案 2 :(得分:-1)
我在之前的一个项目中遇到过这样的问题。我不擅长PHP或Yii2 - 所以请按照我的指南自行承担风险:)
添加use path\to\ExternalLibrary
时,表示接口已准备好在当前类中使用(例如CurrentController.php)。
这意味着您的应用程序知道如何将您的路径带到它的舞台。
E.g。 use common\models\Post
可让您直接使用Post
类作为$posts = new Post;
因此,如果您的库只包含一个文件,那么只需放置一些“canonic”路径。以common\models\
为例。所以你可以像任何其他模型界面一样使用它。
但为了您的项目,请将其放在供应商文件夹中。然后使用composer安装随机库。并观察哪些文件被修改(一般1-3个)。还尝试了解修改逻辑。当您确定已掌握所有内容时,请复制并粘贴这些部分并更改库的路径,名称等。
我认为最好的方法是使您的库PSR-4兼容并将其作为PHP包发布。因此,其他人也可以从您的工作中受益。
有很多关于制作php包的指南。
如果您打算成为一名优秀的PHP开发人员,我建议您查阅Josh Lockhart的“现代PHP:新功能和良好实践”一书(免费提供PDF格式:))。这将有助于您了解OO PHP的基础知识,包括命名空间,接口等。因此,您将能够以现代方式处理此类问题。