Symfony 4-是否可以设置变量命令名称?

时间:2019-06-06 22:11:57

标签: symfony symfony4

我正在用symfony 4制作测试CLI-app,我想知道,是否可以将单个ClassCommand用于多种用途?!

例如,我的测试cli-app有几个动作/命令,但是它们非常相似。我不喜欢重复代码(也没有人丢弃DRY建议),所以我认为最好使用单个命令,但要根据其名称选择使用哪种算法。例如。命令名称user:manager将执行一组指令,而user:designer-将执行另一组指令,并且所有这些都将在一个ClassCommand中执行。

namespace App\Command;


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

class UserCommand extends Command
{

    // some properties

    protected function configure()
    {
        $this
            ->setName('user:somebody')
        // and other stuff
    }
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        // output code here
    }

}

对于其他命令,我现在必须创建另一个ClassCommand。好的,我可以从UserCommand扩展它,但是我仍然必须指定方法“ configure”和“ execute”(如果必须重写)。多余的代码太多了,对吗?

此刻我还不知道该如何做。

回到问题:可以使命令名动态化吗?

1 个答案:

答案 0 :(得分:0)

不可能,这是不可能的。但是我认为那不是正确的解决方案。

我建议采用以下方法之一;要么:

  • 为每组指令创建一个命令(例如, a b c 0 1 5 9.0 1 3 7 0.0 2 2 6 NaN 3 4 8 NaN 的一个命令类和user:manager的一个命令类)。然后,您可以使用特征或从通用抽象类进行扩展。

  • 或将参数传递给单个命令类-例如user:designer

  

我可以从UserCommand扩展它,但是我仍然必须指定方法“ configure”和“ execute”(如果必须重写)。多余的代码太多了,对吗?

您可以在抽象的UserCommand中指定这两种方法,并声明一些抽象方法,例如bin/console user:do-thing --type=designer,这些方法将在设计器类中实现。