Как предоставить пространство имен ядра для кодирования для проекта Symfony4
Я тестирую новую структуру каталогов Symfony4 с помощью Coception.
Устанавливается и настраивается кодек. Из-за конца стратегии связки я знал, что произойдет ошибка, и вот ошибка:
PHP Fatal error: Uncaught Error: класс 'Kernel' не найден в
...my_projectvendorcodeceptioncodeceptionsrcCodeceptionModuleSymfony.php:146
Codeception не находит класс ядра из-за его нового пространства имен, которое является приложением, а не пустым пространством имен.
Ядро теперь находится в каталоге src и объявлено в Пространство имен приложений.
Новое объявление ядра
src / ядро.php
namespace App; // <-- the namespace
[...]
class Kernel extends BaseKernel[...]
Ранее ядро называлось AppKernel и не имело пространства имен:
Старое объявление ядра
app / AppKernel.php
<?php
//no namespace
[...]
class AppKernel extends Kernel
Я отредактировал 265-ю строку файла Symfony.php
, чтобы изменить эту строку, которая возвращает Kernel
:
$class = $file->getBasename('.php');
По этой строке вернуть AppKernel
:
$class = 'App\'.$file->getBasename('.php');
Эта модификация заставляет новое пространство имен новая структура.
Мои функциональные тесты работают отлично, но я хочу избежать модификации в файле поставщика.
Как я могу заставить пространство имен приложений без этого взлома ? Кажется, что нет никакого параметра, чтобы сделать это, но могу ли я инкапсулировать codeception в пространстве имен приложений или найти хак, чтобы поместить его в Мои файлы, а не в файл поставщика?
2 ответа:
Существует известная проблема в кодек -цепции https://github.com/Codeception/Codeception/issues/4695 . в основном кодек позволяет использовать только определенные имена ядра Symfony:
# codeception/src/Codeception/Module/Symfony.php:287 $possibleKernelClasses = [ 'AppKernel', // Symfony Standard 'App\Kernel', // Symfony Flex ];
Обходным путем, на данный момент, было бы использовать
class_alias('MyNamespace\Kernel', 'App\Kernel');
, Как было отмечено @Federkun.