Magento 2 - setup: di: compile throw Es wurden keine Token als Fehler bereitgestellt

11

In Magento 2 erhalte ich beim Ausführen setup:di:compileden folgenden Fehler:

[Zend \ Code \ Exception \ RuntimeException]
Es wurden keine Token bereitgestellt

Wie kann man dieses Problem lösen?

Ich habe alle zusätzlichen Module deaktiviert, Setup: Upgrade ausgeführt, aber trotzdem wird der Token-Fehler angezeigt.

Tom
quelle

Antworten:

23

Ich habe dieses Problem festgestellt und für jede Instanz von "Es wurden keine Token bereitgestellt" Haltepunkte gesetzt.

grep -lr 'No tokens were provided' vendor/

welches zurückkehrte:

vendor/zendframework/zend-code/src/Scanner/ConstantScanner.php
vendor/zendframework/zend-code/src/Scanner/TokenArrayScanner.php
vendor/zendframework/zend-code/src/Scanner/MethodScanner.php
vendor/zendframework/zend-code/src/Scanner/PropertyScanner.php
vendor/zendframework/zend-code/src/Scanner/ClassScanner.php

Meine Ausnahme wurde in die TokenArrayScanner.phpDatei geworfen . Der Instanzwert "Token" wird im Konstruktor festgelegt, daher habe ich dort einen Haltepunkt gesetzt und den Prozess neu gestartet. Leider wird dieser Konstruktor für zahlreiche Dateien mehrmals aufgerufen, und Daten für die zu tokenisierende Datei sind nicht im Konstruktaufruf enthalten. Ich konnte feststellen, dass die "Token" nur Zeilen der zu inspizierenden Datei sind. Basierend auf dem Beitrag von CarComp habe ich dies verwendet, um die fehlerhafte Datei zu finden:

find . -type f -name '*.php' -empty

Dies ergab eine Reihe von Dateien, die sich unter Pfaden befanden, die "dev / tests" enthielten, die vom Scannen ausgeschlossen sind, sowie eine einzelne Datei eines Drittentwicklers. Das Entfernen dieser Datei löste das Problem und der Kompilierungsbefehl wurde nur mit Beschwerden und nicht mit Ausnahmen ausgeführt.

Andrew C. Stayart
quelle
Danke, wirklich sehr hilfreich. Ich habe eine leere Datei in unserem benutzerdefinierten Modul, nachdem ich die Datei gelöscht habe, die ich ohne Fehler kompilieren kann.
Manish
10

Wenn Sie wissen möchten, wie diese leeren Dateien zu finden sind, führen Sie diesen Befehl (vorausgesetzt, Sie haben Linux und Zugriff auf die Shell) in Ihrem Magento-Stammverzeichnis oder in dem Verzeichnis aus, in dem Sie möglicherweise leere Dateien haben. .

find -type f -empty
CarComp
quelle
5

Anscheinend haben Sie eine leere Datei, die von \ Magento \ Setup \ Module \ Di \ Code \ Reader \ ClassesScanner analysiert wird und die PHP- Methode token_get_all verwendet. Die Ausnahme wird ausgelöst, wenn die Methode keinen Wert zurückgibt, was bei einer leeren Datei der Fall ist.

Casdero
quelle
3

Leere Dateien führen auch zu dem Problem, dass keine Token bereitgestellt wurden. Daher sollte ClassesScanner überprüft werden, um festzustellen, ob der verwendete Verzeichniseintrag oder eine Klassendatei eine gültige Datei ist und deren Inhalt nicht leer ist. Sie müssen den erstellten Dateien den richtigen Inhalt hinzufügen, oder er sollte nicht definiert / erstellt werden.

Himmat Paliwal
quelle
3

Sie können dies in folgenden Zustand setzen:

    if (!$this->tokens) {
        \Zend_Debug::dump(get_object_vars($this); exit;
        throw new \Zend\Code\Exception\RuntimeException('No tokens were provided');
    }

Überprüfen Sie dann system.log, um festzustellen, welche Datei diesen Fehler verursacht hat.

JohnyFree
quelle