Xav*_*ero 5 command production-environment autowired symfony4 disable
在我的App我有一个 helper 类App\Command\GenerateFixturesCommand,它提供了一个名为my-nice-project:generate-fixtures.
此命令使用我自己的项目的服务,该服务名为App\Services\CatalogFixtureGenerator在开发应用程序时生成 1000 个随机 PDF 文档用于测试。
为此,此服务使用joshtronic\LoremIpsum仅在dev. LoremIpsum 是第三方库。我需要在作曲家的require-dev.
所以注入是:
GenerateFixturesCommand.CatalogFixtureGenerator并将其注入命令中。LoremIpsum第三方服务将其注入到我的夹具生成器服务中。一切都是自动装配的。
当我部署prod并执行时composer install --no-dev --optimize-autoloader,当然LoremIpsum没有安装该类。
但是当我用APP_ENV=prod php bin/console cache:clear框架清除缓存时找到了命令并且无法注入自动装配的依赖项。
[WARNING] Some commands could not be registered:
In CatalogsFixtureGenerator.php line 26:
Class 'joshtronic\LoremIpsum' not found
Run Code Online (Sandbox Code Playgroud)
此my-nice-project:generate-fixtures命令永远不会在生产服务器中使用。
如何“禁用”中的命令prod?
我的意思是:如何告诉框架GenerateFixturesCommand不应加载该类及其自动装配的依赖项,也不应自动装配它们prod?
使用isEnabled()命令中的方法。例如
public function isEnabled(): bool
{
// disable on prod
if ($this->appKernel->getEnvironment() === 'prod') {
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
在我的上一个项目中,我需要一些命令仅在开发环境中工作。您可以使用getenv函数来实现此目的:
# src/Command/SomeCommand.php
...
public function __construct()
{
parent::__construct();
if (getenv("APP_ENV") !== "dev") {
exit('This command should work only "dev" environment.');
}
}
Run Code Online (Sandbox Code Playgroud)
这样就可以解决问题了。
代码乐趣:)
| 归档时间: |
|
| 查看次数: |
1539 次 |
| 最近记录: |