Dzisiaj otrzymałem błąd tego samego typu:
Błąd krytyczny PHP: Nie można zadeklarować klasy Klasa \ Nazwa \ Tutaj, ponieważ nazwa jest już używana w /var/www/m2/magento2/app/code/path/to/the/class.php w linii 100
gdzie linia 100 jest końcem pliku.
Mniej więcej po 4 godzinach debugowania naprawdę znajduję przyczynę: błędny wydruk w deklaracji przestrzeni nazw. Do ostatniej chwili nie wierzyłem, że jest to błąd typograficzny w deklaracji nazw, ale kiedy przepisałem wszystkie nazwy na nowo - błąd zniknął. Ten artykuł był bardzo pomocny:
Drapię się przez chwilę w głowę, zastanawiam się, co się dzieje, i ostatecznie zdaję sobie sprawę, że to jest to
Pulsetorm
tzn. źle wpisałem nazwę przestrzeni nazw, a kiedy początkowe autoloadowanie ładuje plik klasy, nie zdefiniowałoby klasy, której szuka, a następnie drugi autoloader (zwykle kompozytora) ładuje go ponownie i próbuje przedefiniować to samo niepoprawna klasa.
tj. Magento chciał klasy
Pulsestorm\Helloworld\Observers\Block
ale zdefiniowałem
Pulsetorm\Helloworld\Observers\Block
dzięki złej przestrzeni nazw.
Dziękuję, Alan Storm :)
AKTUALIZACJA:
Innym typem tego błędu jest niepoprawna deklaracja przestrzeni nazw z brakującą częścią przestrzeni nazw, jak w tym przykładzie:
Błąd:
Generowanie kodu repozytoriów ... 1/7 [====> -----------------------] 14% 1 s 50,0 MiBPHP Błąd krytyczny: Nie można zadeklarować klasa Migration \ Step \ Version11410to2000Test, ponieważ nazwa jest już używana w /var/www/vhosts/rwld/vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php linia 109
gdzie linia 109 jest końcem pliku.
W pliku vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php
znaleźliśmy przestrzeń nazw tak, jak Migration\Step
powinna być poprawna przestrzeń nazw, Migration\Step\UrlRewrite
ponieważ jest to ścieżka do tej klasy Migration/Step/UrlRewrite
. Po zmianie przestrzeni nazw Migration/Step/UrlRewrite
na błąd zniknął.