2015-06-29 6 views
6

Ich bin neu in Composer, Namespaces und Autoload und ich konnte nicht herausfinden, wo ich meinen Code schreiben sollte (unter vendor?).Wo soll ich meinen Code schreiben, damit Composer meine PHP-Klassen automatisch laden kann?

Ich habe ein Verzeichnis mit dem Namen ilhan unter der vendor erstellt, und eine Datei mit dem Namen People.php. Dann in der Haupt index.php Datei mit use ilhan\People.php as People; funktioniert nicht, weil ich denke, dass es ursprünglich in autoload_namespaces.php geschrieben worden sein muss.

Aber wenn ich ilhan als ein Verkäufer dann registriere, denke ich, dass Komponist in die packagist.org schauen wird, die es nicht dort ist.

Antwort

7

innerhalb Wurzel Ihrer Projektverzeichnis erstellen ilhan, nicht in vendor Verzeichnis und setzen folgend in composer.json,

"autoload": {      
     "psr-4": { 
      "Ilhan\\": "ilhan/" 
     }    
    }, 

wahrscheinlich haben Sie bereits psr-4 autoload config in Ihrer composer.json Datei hinzugefügt, wenn Sie eine Art von Framework verwenden, in diesem Fall fügen Sie einfach "Ilhan\\": "ilhan/" hinzu. Nun erstellen People.php innerhalb ilhan Verzeichnis mit Inhalt folgenden

<?php 

    namespace Ilhan; 

    class People{} 

Vergewissern Sie sich require __DIR__.'/vendor/autoload.php'; in index.php enthalten ist jeder wie, dann composer dump-autoload laufen.

Jetzt in index.php nur unten require __DIR__.'/vendor/autoload.php'; arbeiten folgende sollte,

use Ilhan\People; 

Aber warum wollen Sie People Klasse in index.php benutzen?

+0

Danke! Es funktioniert genau so, wie ich es wollte! 'People' Klasse ist nur für Testzwecke, ich werde es in eine andere Datei verschieben. Ich benutze [Restler] (https://github.com/Luracast/Restler). – ilhan

0

Ihr Code wird in das Stammverzeichnis Ihres Projekts (oder eines Unterverzeichnisses) geschrieben. Der Ordner vendor ist nur für Pakete/Bibliotheken gedacht, die von Composer heruntergeladen wurden. Sie sollten dort niemals etwas ändern.

Um ein Projekt zu starten, erstellen Sie einfach eine neue Datei, z. /my-project/index.php und erfordern die autoload.php, die automatisch von dem Komponisten erstellt:

<?php 
    require __DIR__.'/vendor/autoload.php'; 

    // here comes your project code 

Weitere Informationen über das automatische Laden finden Sie in der offiziellen Komponisten Dokumentation Basic Usage: Autoloading

+0

Ich habe 'require_once '../ vendor/restler.php';' lädt autoload.php und lädt dann Restler and Illuminate \ Database. Aber ich möchte meine eigenen Klassen auf diese Weise laden. – ilhan

Verwandte Themen