我有一个接口UserIdProvider
,该接口具有两个实现:
ConsoleUserIdProvider - it takes user id from CLI input option
RequestUserIdProvider - it comes from {userId} parameter in route
仅在运行CLI时,应该如何配置Kernel
来注入控制台实现;在对Web服务器的常规请求中,如何使用第二个控制台实现?
我为加载的ConsoleKernel extends Kernel
创建了单独的console.php
:
$loader->load($confDir . '/console_services.yml');
但是不幸的是,它在APP_ENV=prod
常规Kernel
模式下应通过RequestUserIdProvider
模式通过缓存覆盖。
谢谢。
答案 0 :(得分:0)
我知道了。为此,我应该创建一个新的cli
环境。
ConsoleKernel
。没必要。console_services.yml
以遵循Symfony的惯例,在我的情况下应该是services_cli.yml
。我的控制台特定的实现位于此处。console.php
以在cli
环境中禁用调试模式,例如prod
:$notLikeProdEnv = !in_array($env, ["prod", "cli"], true); $debug = ($_SERVER['APP_DEBUG'] ?? $notLikeProdEnv) && !$input->hasParameterOption(['--no-debug', '']);
php console --env=cli
时只能看到特定于cli
环境的命令以及我的ConsoleUserIdProvider
实现。