我有一个接口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
应该被使用。
提前致谢。
我想到了。我应该为此创建新的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
实现。