通过 Symfony/Console 创建不同类型的类

Posted

技术标签:

【中文标题】通过 Symfony/Console 创建不同类型的类【英文标题】:Create different type of classes via Symfony/Console 【发布时间】:2019-10-07 04:24:00 【问题描述】:

我在一个自定义 php 应用程序(不是 Symfony 应用程序,只是使用 Symfony 之外的组件)上设置了 Symfony 控制台,并在我的根目录下创建了一个 app 文件

#!/usr/bin/env php
<?php
// Include framework's dependencies through composer's autoload feature
require __DIR__ . '/vendor/autoload.php';

$application = new Symfony\Component\Console\Application();

// ... register commands
$application->add(new TestCommand());

$application->run();

这是我设置的测试类

<?php

namespace Mvc\Commands;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class TestCommand extends Command

    /**
     * The name of the command (the part after "bin/console")
     * 
     * @var string
     */
    protected $command_name = 'app:test';

    /**
     * The description of the command (the part after "bin/console")
     * 
     * @var string
     */
    protected $command_description = "Try to echo Hello World for testing if it works.";

    protected function configure()
    
        $this->setName($this->command_name)
             ->setDescription($this->command_description);
    

    protected function execute(InputInterface $input, OutputInterface $output)
    
        $name = $input->getArgument($this->command_argument_name);
    

如何创建命令来生成不同类型的类,例如 Laravel 如何生成控制器、模型等(php artisan make:controller TestController 等)?

【问题讨论】:

工匠代码以及 Symfony 制造商捆绑代码都是开源的,可在 github 上获得。通常,您将拥有一个控制器模板类,您可以在其中注入控制器特定的值。 这就是我想要做的,设置一些类模板并将它们拉入 *Commads 类,但是在 Symfony 的文档中没有找到任何关于如何做到这一点的文档symfony.com/doc/current/components/console.html 这不是 Symfony 文档的一部分。相反,您必须研究 Laravel 是如何做到这一点的,例如通过研究他们的commands, like ModelMakeCommands 或Symfony's MakerBundle 之一。您甚至可能希望在他们的基础上再接再厉。恐怕到目前为止,这个问题太模糊,无法有意义地回答。如果您在研究过程中遇到困难,请随时针对您遇到的问题提出更具体的问题。 @dbrumann 如果您愿意,可以将其写为答案,以便我接受 【参考方案1】:

您必须使用composer require symfony/maker-bundle --dev 安装maker-bundle

在此之后,写php bin/console make 并按回车键以显示所有可用的命令。

【讨论】:

这是特定于 Symfony 的还是我也可以在 Symfony 之外使用它?我正在进行的项目是自定义项目,不基于任何已知框架

以上是关于通过 Symfony/Console 创建不同类型的类的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 5.2.3 接口类型提示

通过读取具有不同数据类型的 Scala 序列来创建 Spark 数据帧

Spark - 使用不同的数据类型以编程方式创建模式

如何创建具有选择的多个用户模型?

面试题

Jenkins 的安装与基础配置