Я тестирую новую структуру каталогов Symfony4 с Coception.
Codeception установлен и настроен. Из-за стратегии конца пакета я знал, что произойдет ошибка, и вот ошибка:
Неустранимая ошибка PHP: необработанная ошибка: класс «ядро» не найден в
...\my_project\vendor\codeception\codeception\src\Codeception\Module\Symfony.php:146
Codeception не находит класс ядра из-за его нового пространства имен, которое является приложением, а не пустым пространством имен.
Ядро теперь находится в каталоге src и объявлено в пространстве имен App.
Новая декларация ядра
источник/Kernel.php
namespace App; // <-- the namespace
[...]
class Kernel extends BaseKernel[...]
Ранее ядро называлось AppKernel и не имело пространства имен:
Старая декларация ядра
приложение/AppKernel.php
<?php
//no namespace
[...]
class AppKernel extends Kernel
Я отредактировал 265-ю строку файла Symfony.php
, чтобы изменить эту строку, которая возвращает Kernel
:
$class = $file->getBasename('.php');
этой строкой, чтобы вернуть App\Kernel
:
$class = 'App\\'.$file->getBasename('.php');
Эта модификация заставляет использовать новое пространство имен новой структуры.
Мои функциональные тесты работают отлично, но я хочу избежать изменений в файле поставщика.
Как я могу принудительно использовать пространство имен приложения без этого хака? Кажется, для этого нет параметра, но могу ли я инкапсулировать кодовое восприятие в пространстве имен приложения или найти хак, чтобы поместить его в свои файлы, а не в файл поставщика?
class_alias('App\Kernel', 'AppKernel');
недостаточно? - person Federkun   schedule 04.09.2017class_alias('App\Kernel', 'Kernel');
, но я обрабатываю эту ошибку:Cannot declare class App\Kernel, because the name is already in use
- person Alexandre Tranchant   schedule 04.09.2017bootstrap.php
файла (в каталоге тесты\функционал и тесты) Если я поместил его только в один файл, он, конечно, работает лучше - person Alexandre Tranchant   schedule 04.09.2017