symfony 3 console控制器命令列表



由于我不知道如何描述它,我没有在google或stack中找到任何结果。

我想用Controller-Action列出所有可用的控制台命令(可以通过使用bin/console调用),这样我就可以将所有命令的列表转发给twig。

我怎么能做到这一点呢?

有趣的问题。当然,您可以只运行console命令本身并捕获命令列表。这可能是最好的方法。

然而,有一个名为console.command_loader的服务,它有一个名为getNames的方法,该方法确实返回命令名称列表。它实现CommandLoaderInterface。

最初我尝试创建一个别名,这样它就可以被注入到一个动作方法中:

services:
SymfonyComponentConsoleCommandLoaderCommandLoaderInterface: 
alias: console.command_loader

但是我一直没有找到console.command_loader,这是令人费解的,因为调试:容器显示它。该服务被标记为container.no_preload,这可能与此有关。不确定。

所以我去定义控制器服务:

services:
AppControllerCommandController:
tags:
- 'controller.service_arguments'
arguments:
- '@console.command_loader'

让我有点惊讶的是,它成功了。

class CommandController extends AbstractController
{
public function __construct(private CommandLoaderInterface $cl)
{
}

#[Route('/commands', name: 'app_commands')]
public function commands(): Response
{
$names = $this->cl->getNames();
dump($names);
// I happen to have a command called app:init
$initCommand = $this->cl->get('app:init');
dump($initCommand->getDescription());
//return $this->render('default/index.html.twig', [
//    'controller_name' => 'DefaultController ' . 'Commands',
//]);
}
}

这些都是在Symfony 6中完成的。碰巧手头没有Symfony 3应用程序。您的第一步将是确认Symfony 3也具有bin/console debug:container console.command_loader服务。如果它没有这样的服务,那就去看看它是否有类似的服务。

相关内容

  • 没有找到相关文章

最新更新