Сьогодні я отримав однотипну помилку:
PHP Fatal error: Неможливо оголосити клас Class \ Name \ Here, тому що ім'я вже використовується в /var/www/m2/magento2/app/code/path/to/the/class.php у рядку 100
де рядок 100 - кінець файлу.
Приблизно через 4 години налагодження я дійсно знаходжу причину: помилку в декларації простору імен. До останнього моменту я не повірив, що це друкарська помилка в декларації імен, але коли я переписав усі імена заново - помилка зникла. Ця стаття була дуже корисною:
Я трохи дряпаю голову, цікавлюсь, що відбувається, і врешті зрозумію, що це таке
Pulsetorm
тобто я неправильно ввів ім’я простору імен, і коли початкові автозавантаження завантажують файл класу, він не визначив би клас, який він шукає, а потім другий автозавантажувач (зазвичай композитор) завантажує його ще раз, і намагається повторно визначити те саме неправильний клас.
тобто Магенто хотів класу
Pulsestorm\Helloworld\Observers\Block
але я визначив
Pulsetorm\Helloworld\Observers\Block
завдяки неправильному простору імен.
Дякую, Алан Шторм :)
ОНОВЛЕННЯ:
Іншим типом цієї помилки є неправильне оголошення простору імен з відсутньою частиною простору імен, як у цьому прикладі:
Помилка:
Генерація коду сховищ ... 1/7 [==== -----------------------] 14% 1 сек 50,0 MiBPHP Фатальна помилка: Неможливо оголосити клас міграції \ Step \ Version11410to2000Test, тому що ім'я вже використовується в /var/www/vhosts/rwld/vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php рядок 109
де рядок 109 - кінець файлу.
У файлі vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php
ми знайшли простір імен як Migration\Step
тоді, коли має бути правильна область імен, Migration\Step\UrlRewrite
тому що шлях до цього класу є Migration/Step/UrlRewrite
. Після зміни простору імен на Migration/Step/UrlRewrite
помилку немає.