如何为 Symfony4 项目的 Codeception 提供内核命名空间
How to provide namespace of Kernel to Codeception for a Symfony4 project
我正在使用 Coception 测试 Symfony4 新目录结构。
Codeception 已安装并配置。由于bundle strategy结束,我知道会发生错误,错误如下:
PHP Fatal error: Uncaught Error: Class 'Kernel' not found in ...\my_project\vendor\codeception\codeception\src\Codeception\Module\Symfony.php:146
Codeception 找不到内核 class,因为它的新命名空间是 App 而不是空命名空间。
内核现在位于 src 目录中并在 App 命名空间中声明。
新内核声明
src/Kernel.php
namespace App; // <-- the namespace
[...]
class Kernel extends BaseKernel[...]
之前,Kernel 被命名为 AppKernel 并且没有命名空间:
旧内核声明
app/AppKernel.php
<?php
//no namespace
[...]
class AppKernel extends Kernel
我编辑了 Symfony.php
文件的第 265 行以更改此行 returning Kernel
:
$class = $file->getBasename('.php');
通过这一行到 return App\Kernel
:
$class = 'App\'.$file->getBasename('.php');
此修改强制新结构的新命名空间。
我的功能测试运行完美,但我想避免修改供应商文件。
如何在没有这个 hack 的情况下强制使用 App 命名空间?似乎没有参数可以做到这一点,但我可以在应用程序命名空间中封装 codeception 或找到一个 hack 将它放在我的文件中,而不是在供应商文件中吗?
您可以为内核创建别名 class:
class_alias('App\Kernel', 'Kernel');
Codeception https://github.com/Codeception/Codeception/issues/4695 中存在一个已知问题。基本上 Codeception 只允许某些 Symfony 内核名称:
# codeception/src/Codeception/Module/Symfony.php:287
$possibleKernelClasses = [
'AppKernel', // Symfony Standard
'App\Kernel', // Symfony Flex
];
目前的解决方法是使用@Federkun 指出的class_alias('MyNamespace\Kernel', 'App\Kernel');
。
我正在使用 Coception 测试 Symfony4 新目录结构。
Codeception 已安装并配置。由于bundle strategy结束,我知道会发生错误,错误如下:
PHP Fatal error: Uncaught Error: Class 'Kernel' not found in
...\my_project\vendor\codeception\codeception\src\Codeception\Module\Symfony.php:146
Codeception 找不到内核 class,因为它的新命名空间是 App 而不是空命名空间。
内核现在位于 src 目录中并在 App 命名空间中声明。
新内核声明
src/Kernel.php
namespace App; // <-- the namespace
[...]
class Kernel extends BaseKernel[...]
之前,Kernel 被命名为 AppKernel 并且没有命名空间:
旧内核声明
app/AppKernel.php
<?php
//no namespace
[...]
class AppKernel extends Kernel
我编辑了 Symfony.php
文件的第 265 行以更改此行 returning Kernel
:
$class = $file->getBasename('.php');
通过这一行到 return App\Kernel
:
$class = 'App\'.$file->getBasename('.php');
此修改强制新结构的新命名空间。
我的功能测试运行完美,但我想避免修改供应商文件。
如何在没有这个 hack 的情况下强制使用 App 命名空间?似乎没有参数可以做到这一点,但我可以在应用程序命名空间中封装 codeception 或找到一个 hack 将它放在我的文件中,而不是在供应商文件中吗?
您可以为内核创建别名 class:
class_alias('App\Kernel', 'Kernel');
Codeception https://github.com/Codeception/Codeception/issues/4695 中存在一个已知问题。基本上 Codeception 只允许某些 Symfony 内核名称:
# codeception/src/Codeception/Module/Symfony.php:287
$possibleKernelClasses = [
'AppKernel', // Symfony Standard
'App\Kernel', // Symfony Flex
];
目前的解决方法是使用@Federkun 指出的class_alias('MyNamespace\Kernel', 'App\Kernel');
。