gpt4 book ai didi

command - 如何使 symfony 4 命令仅在开发环境中注册并在产品中禁用?

转载 作者:行者123 更新时间:2023-12-03 17:02:59 26 4
gpt4 key购买 nike

在我的 App我有一个助手类App\Command\GenerateFixturesCommand它提供了一个名为 my-nice-project:generate-fixtures 的命令.

此命令使用我自己的项目的服务,名为 App\Services\CatalogFixtureGenerator在开发应用程序时生成 1000 个随机 PDF 文档用于测试。

为此,此服务使用 joshtronic\LoremIpsum仅在 dev 中 Composer 需要的类. LoremIpsum is a third-party library.我需要它在 Composer 的 require-dev 下.

所以注入(inject)是:

  • 我运行我的GenerateFixturesCommand .
  • 在此之前,系统会透明地定位我的CatalogFixtureGenerator。并将其注入(inject)命令中。
  • 在此之前,系统透明定位LoremIpsum第三方服务将其注入(inject)我的夹具生成器服务。

  • 一切都是自动接线的。

    当我部署到 prodcomposer install --no-dev --optimize-autoloader当然是 LoremIpsum类没有安装。

    但是当我用 APP_ENV=prod php bin/console cache:clear 清除缓存时框架找到该命令并且无法注入(inject) Autowiring 的依赖项。
    [WARNING] Some commands could not be registered:
    In CatalogsFixtureGenerator.php line 26:
    Class 'joshtronic\LoremIpsum' not found

    这个 my-nice-project:generate-fixtures命令永远不会在生产服务器中使用。

    问题

    如何“禁用” prod 中的命令?

    我的意思是:我如何告诉框架类 GenerateFixturesCommand不应加载及其 Autowiring 的依赖项,也不应在 prod 中 Autowiring 它们。 ?

    最佳答案

    使用 isEnabled()命令中的方法。
    例如

        public function isEnabled(): bool
    {
    // disable on prod
    if ($this->appKernel->getEnvironment() === 'prod') {
    return false;
    }

    return true;
    }

    关于command - 如何使 symfony 4 命令仅在开发环境中注册并在产品中禁用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56100814/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com