在yii2中,如何自动加载我自己的PHP类?

时间:2016-04-13 14:05:19

标签: php yii2

在我的控制器中,我想要一个函数来使用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;

3 个答案:

答案 0 :(得分:0)

Yii已经有了自动加载器,你无需加载课程。 只需使用正确的命名空间创建您的类,它将被加载到您只在哪里使用它。

Namspace应该代表PHP文件的真实路径。 PHP文件名和类名应该相同。

答案 1 :(得分:-1)

您应该只使用mpdf/mpdf包:

  1. 使用composer安装它:

    composer require "mpdf/mpdf" ">=6.0.0"

  2. 像这样使用:

    $mpdf = new \mPDF();

  3. 或者你可以像这样使用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的基础知识,包括命名空间,接口等。因此,您将能够以现代方式处理此类问题。