Magento 2 - setup: di: compile throws Никаких токенов не было предоставлено ошибка

11

В magento 2 при запуске setup:di:compileя получаю следующую ошибку:

[Zend \ Code \ Exception \ RuntimeException] Токены
не предоставлены

Как решить эту проблему?

Я отключил все дополнительные модули, запустил setup: upgrade, но все равно получаю ошибку токенов.

Том
источник

Ответы:

23

Я столкнулся с этой проблемой и установил контрольные точки для каждого экземпляра «Токены не предоставлены», который я мог найти, используя:

grep -lr 'No tokens were provided' vendor/

который вернулся:

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

Мое исключение было брошено в TokenArrayScanner.phpфайл. Значение экземпляра "tokens" устанавливается в конструкторе, поэтому я поставил точку останова и перезапустил процесс. К сожалению, этот конструктор вызывается много раз во многих файлах, и данные для файла, который токенизируется, не включаются в вызов конструкции. Я смог определить, что «токены» - это просто строки проверяемого файла. Основываясь на сообщении CarComp, я использовал это, чтобы найти оскорбительный файл:

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

Получилось несколько файлов, которые жили по путям, содержащим «dev / tests», которые исключены из сканирования, и один файл от стороннего разработчика. удаление этого файла решило проблему, и команда компиляции завершилась только жалобами, а не исключениями.

Эндрю С. Стайарт
источник
Спасибо, действительно очень полезно. У меня есть пустой файл в нашем пользовательском модуле после удаления файла, который я могу скомпилировать без ошибок.
Маниш
10

Здесь, если вы хотите узнать, КАК найти эти пустые файлы, просто запустите эту команду (при условии, что у вас есть linux и доступ к оболочке) в корневом каталоге magento, или в любом другом каталоге, в котором вы работаете, могут быть пустые файлы .. ,

find -type f -empty
CarComp
источник
5

Кажется, у вас есть пустой файл, который анализируется с помощью \ Magento \ Setup \ Module \ Di \ Code \ Reader \ ClassesScanner , который использует метод PHP token_get_all . Исключение выдается, если метод не возвращает никакого значения, как в пустом файле.

casdero
источник
3

Пустые файлы также провоцируют проблему отсутствия токенов, поэтому необходимо проверить ClassesScanner, чтобы оценить, является ли используемая запись каталога или какой-либо файл класса допустимым файлом и не является ли его содержимое пустым. Вам необходимо добавить надлежащий контент в созданные файлы ИЛИ его не следует определять / создавать.

Химмат Паливал
источник
3

Вы можете поместить это внутрь, если условие:

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

Затем проверьте system.log, чтобы увидеть, какой файл вызвал эту ошибку.

JohnyFree
источник