2016-04-13 3 views
0

In meinem Controller möchte ich eine Funktion verwenden mpdf z.In yii2, wie kann ich meine eigenen PHP-Klassen automatisch laden?

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

    } 

} 

Dies funktioniert nicht, und wirft einen Fehler:

Class 'app\controllers\mPDF' not found

Was soll ich tun, wenn ich die Klasse

(a) automatisch zu laden wollen. Nur für diesen Controller Aktion

(b). Um es überall nur mit der use-Anweisung nutzbar zu machen.

Ich weiß, es muss etwas mit namespaces tun, aber weiß nicht, wie definiere ich einen Namespace, und wo stelle ich diese MPDF57 Ordner und dann zugänglich machen.

Ich habe auch versucht dies:

$name = "MPDF57/mpdf.php"; 
spl_autoload_register(function ($name) { 
    var_dump($name); 
}); 

Aber diese entweder nicht funktioniert hat. löst den gleichen Fehler aus, wenn ich meine Controller-Aktion anrufe. Hier

ist der Namespace-Deklaration und use Aussagen innen:

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

Können Sie uns den Anfang Ihrer Datei zeigen, mit den Use-Anweisungen und schließlich der Namespace-Deklaration? –

+0

Was ist der Pfad von mpdf.php relativ zu deinem Yii Webroot? – topher

+0

Namespace-App \ Controller; Verwendung Yii; Verwenden Sie App \ models \ Regs; Verwenden Sie App \ models \ Wähler; Verwenden Sie App \ models \ RegsSearch; verwenden Sie yii \ web \ Controller; Verwenden Sie yii \ web \ NotFoundHttpException; Verwenden Sie yii \ filters \ VerbFilter; Verwenden Sie \ yii \ web \ Response; Verwenden Sie yii \ helpers \ Html; Verwenden Sie kartik \ mpdf \ Pdf; –

Antwort

-1

Sie einfach mpdf/mpdf Paket verwenden sollte:

  1. Installieren Sie es Komponisten mit:

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

  2. es wie folgt verwendet:

    $mpdf = new \mPDF();

Oder Sie eine yii2 Erweiterung wie diese verwenden: https://github.com/kartik-v/yii2-mpdf

+0

Ich möchte eine Lösung, um meine eigenen Klassen zu laden. mpdf ist nur ein Beispiel –

+0

Ihre Frage ist über mpdf ... – soju

+0

Downvoter, erklären Sie sich! – soju

-1

Ich habe konfrontiert solche Probleme in einem meiner früheren Projekte. Ich bin nicht gut in PHP oder Yii2 - so folgen Sie meinem Leitfaden auf eigene Gefahr :)

Wenn Sie hinzufügen, , bedeutet dies, dass die Schnittstelle bereit ist, innerhalb der aktuellen Klasse (z. B. CurrentController.php) zu verwenden.

Das bedeutet, dass Ihre Anwendung weiß, wie Sie Ihren Weg auf die Bühne bringen können.

z. use common\models\Post können Sie direkt Post Klasse verwenden, wie $posts = new Post;

Also, wenn Ihre Bibliothek nur eine Datei enthält, ist nur einige "kanonische" Pfad. Zum Beispiel common\models\. Sie können es also wie jede andere Modellschnittstelle verwenden.

Aber aus Gründen Ihres Projekts legen Sie es auf Lieferantenordner. Dann installiere eine zufällige Bibliothek mit Composer. Und beobachten Sie, welche Dateien geändert werden (1-3 in der Regel). Versuchen Sie auch, die Änderungslogik zu verstehen.Wenn Sie sicher sind, dass Sie alles verstanden haben, kopieren und fügen Sie diese Teile ein und ändern Sie die Pfade, Namen usw. für Ihre Bibliothek.

Der beste Weg, denke ich, ist, Ihre Bibliothek PSR-4 kompatibel zu machen und es als ein PHP-Paket zu versenden. So können auch andere von Ihrer Arbeit profitieren.

Es gibt viele Anleitungen zum Erstellen von PHP-Paketen.

Wenn Sie einen guten PHP-Entwickler sein, planen, empfehle ich Josh Lockhart zu sehen „Moderne PHP: Neue Funktionen und Good Practices "Buch (kostenlose pdfs sind verfügbar :)). Das wird Ihnen helfen, die Grundlagen von OO PHP einschließlich Namespaces, Schnittstellen usw. zu verstehen. Sie werden also in der Lage sein, solche Probleme auf moderne Weise zu behandeln.

0

Yii hat bereits Autoloader, Sie brauchen nichts, um Ihre Klasse zu laden. Erstellen Sie einfach Ihre Klasse mit dem richtigen Namespace und es wird nur dort geladen, wo Sie es verwenden.

Namespace sollte echten Pfad zu PHP-Datei darstellen. PHP Dateiname und Klassenname sollten gleich sein.

Verwandte Themen