2016-04-13 7 views
0

Внутри моего контроллера я хочу использовать функцию mpdf, например.В yii2, как мне автозагрузить мои собственные классы PHP?

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'); 

    } 

} 

Это не работает, и выдает ошибку:

Class 'app\controllers\mPDF' not found

Что делать, если я хочу автозагрузку классу

(а). Только для этого действия контроллера

(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

Каков путь mpdf.php относительно вашего Yii webroot? – topher

+0

namespace app \ controllers; использовать Yii; использовать приложение \ models \ Regs; use app \ models \ Voters; использовать приложение \ models \ RegsSearch; использовать yii \ web \ Controller; использовать yii \ web \ NotFoundHttpException; использовать yii \ filters \ VerbFilter; использование \ yii \ web \ Response; использовать yii \ helpers \ Html; использовать kartik \ mpdf \ Pdf; –

ответ

-1

Вы должны просто использовать mpdf/mpdf пакет:

  1. установить его с помощью композитор:

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

  2. Используйте это так:

    $mpdf = new \mPDF();

Или вы можете использовать расширение yii2 как этот: https://github.com/kartik-v/yii2-mpdf

+0

Я хочу решение для загрузки моих собственных классов. mpdf - всего лишь пример –

+0

Ваш вопрос про mpdf ... – soju

+0

Downvoter, объясните сами! – soju

-1

Я сталкивался с такими проблемами в одном из моих предыдущих проектов. Я плохо разбираюсь в PHP или Yii2, поэтому следуйте моему руководству на свой страх и риск :)

Когда вы добавляете use path\to\ExternalLibrary, это означает, что интерфейс готов к использованию внутри текущего класса (например, CurrentController.php).

Это означает, что ваше приложение знает, как привести свой путь к своей стадии.

E.g. use common\models\Post позволяет вам напрямую использовать класс Post, так как $posts = new Post;

Итак, если ваша библиотека содержит только один файл, просто поставьте некоторый «канонический» путь. Например, для common\models\. Таким образом, вы можете использовать его, как и любой другой интерфейс модели.

Но ради вашего проекта поставьте его на папку поставщика. Затем установите произвольную библиотеку с композитором. И посмотрите, какие файлы изменены (1-3 в целом). Также попробуйте понять логику модификации.Когда вы убедитесь, что все схватили, скопируйте и вставьте эти части и измените пути, имена и т. Д. Для своей библиотеки.

Лучший способ, я думаю, сделать вашу библиотеку PSR-4 совместимой и отправить ее как пакет PHP. Таким образом, другие могут также извлечь выгоду из вашей работы.

Существует множество руководств по созданию пакетов php.

Если вы собираетесь быть хорошим разработчиком PHP, я рекомендую посмотреть «Современный PHP Джош Локхарта: Новые возможности и Хорошая практика "(бесплатные pdf-файлы доступны :)). Это поможет вам понять основы OO PHP, включая пространства имен, интерфейсы и т. Д. Таким образом, вы сможете справиться с такими проблемами по-современному.

0

У Yii уже был автозагрузчик, вам нечего загружать свой класс. Просто создайте свой класс с правильным пространством имен, и он будет загружен там, где вы его используете.

Namspace должен представлять реальный путь к файлу PHP. Имя файла PHP и имя класса должны быть одинаковыми.

Смежные вопросы