Warum muss ich den Befehl "composer dump-autoload" ausführen, damit Migrationen in Laravel funktionieren?


79

Ich habe in meiner Anwendung einige Migrationsklassen erstellt, um die benötigten Tabellen zu erstellen, erhalte jedoch weiterhin Fehler. Ich muss diesen Befehl ausführen:

composer dump-autoload

Nur dann funktioniert es wieder wie erwartet. Mache ich etwas falsch, das diesen Fehler erzeugt, oder ist dies ein normales Verhalten bei Migrationen?

Unten ist der Fehler, den ich beim Ausführen des Migrationsprozesses erhalte:

  [Symfony\Component\Debug\Exception\FatalErrorException]  
  Class 'CreateVideoStatusTable' not found  

Verwenden Sie Phpartisan für Migrationen?
Duenna

Ja, ich benutze es, um die Erstellungs-Tabelle zu generieren und die Migration auszuführen
Hasan Al-Natour

Haben Sie Illuminate \ Database \ Schema \ Blueprint verwendet? Verwenden Sie Illuminate \ Database \ Migrations \ Migration. in Ihrer Datei und erweitern die Migrationsklasse?
Duenna

Ja, verwenden Sie "Illuminate \ Database \ Schema \ Blueprint verwenden" und "Illuminate \ Database \ Migrations \ Migration verwenden".
Hasan Al-Natour

Wenn ich Migrationsdateien erstelle, sehen sie normalerweise ähnlich aus wie codeshare.io/3iRxd. Sehen Sie nach, ob Ihre einem ähnlichen Muster folgen. Wenn Sie dies nicht tun, müssen Sie sicherstellen, dass Sie die Migrationsklasse erweitern. sieht alles ok aus
Duenna

Antworten:


92

OK, ich glaube, ich kenne das Problem, das Sie haben.

Da Composer die von Ihnen erstellten Migrationsdateien nicht sehen kann, müssen Sie den Befehl dump-autoload ausführen, der nichts Neues herunterlädt, sondern nach allen Klassen sucht, die erneut enthalten sein müssen. Es wird lediglich die Liste aller Klassen neu generiert, die in das Projekt aufgenommen werden müssen (autoload_classmap.php). Aus diesem Grund funktioniert Ihre Migration, nachdem Sie diesen Befehl ausgeführt haben.

So beheben Sie das Problem (möglicherweise) Sie müssen Ihrer Datei composer.json einige zusätzliche Informationen hinzufügen.

"autoload": {
    "classmap": [
        "PATH TO YOUR MIGRATIONS FOLDER"
    ],
}

Sie müssen den Pfad zu Ihrem Migrationsordner zum Classmap-Array hinzufügen. Führen Sie dann die folgenden drei Befehle aus ...

php artisan clear-compiled 
composer dump-autoload
php artisan optimize

Dadurch werden die aktuell kompilierten Dateien gelöscht, die benötigten Klassen aktualisiert und anschließend wieder ausgeschrieben, sodass Sie sie nicht erneut ausführen müssen.

Idealerweise führen Sie diese aus composer dump-autoload -o, um das Laden Ihrer Webseiten zu beschleunigen. Der einzige Grund, warum dies nicht die Standardeinstellung ist, liegt darin, dass die Generierung etwas länger dauert (aber nur geringfügig auffällt).

Ich hoffe, Sie können es schaffen, dies zu sortieren, da es in der Tat sehr ärgerlich ist :(


5
Ich verstehe nicht, warum Laravel nicht damit umgegangen ist, es ist ein großartiger Rahmen.
Hasan Al-Natour

Ich habe bereits meine composer.json-Datei mit folgendem Inhalt: "autoload": {"classmap": ["database"], "psr-4": {"App \\": "app /"}},
Hasan Al- Natour

Wie soll ich den Pfad hinzufügen?
Hasan Al-Natour

Ich hatte einen Fehler beim Ausführen von "PHP Artisan Dump-Autoload": [InvalidArgumentException] Befehl "Dump-Autoload" ist nicht definiert.
Hasan Al-Natour

4
Entschuldigung, Sie müssen Komponisten verwenden, nicht PHP-Handwerker. Also sein Komponist Dump-Autoload
Duenna

2

Du solltest rennen:

composer dump-autoload

und wenn es nicht funktioniert sollten Sie:

re-install composer

2

Kurze Antwort: Klassenzuordnungen sind statisch, während das automatische Laden von PSR dynamisch ist.

Wenn Sie keine Klassenzuordnungen verwenden möchten, verwenden Sie stattdessen das automatische Laden von PSR.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.