14.Magento 2 中如何添加控制台命令

Magento 2 开发目录

本文讨论如何添加控制台命令。Magento 2 使用命令行可以快速实现一些操作:

  • 安装 Magento (相关的还有创建、更新数据表,添加或发布配置文件等)
  • 清缓存
  • 管理索引,重建索引
  • 创建翻译文件及语言包
  • 生成不存在的一些类如工厂类和插件的拦截器,为对像管理器生成依赖注入配置文件
  • 发布静态文件
  • 编译LESS到CSS

开始之前确保 HelloWorld 模块还在,这个模块在前面章节也一直使用。下面开始添加我们自定义的命令:

第一步:在 di.xml 定义命令

在 di.xml 文件中可以使用 name 属性为 Magento\Framework\Console\CommandList 的 type 节点定义命令参数。

文件: app/code/Aqrun/HelloWorld/etc/di.xml


    
        
            Aqrun\HelloWorld\Console\Sayhello
        
    

代码中定义了一个命令类 Sayhello。命令类中会定义命令行名称,并实现 execute() 方法

第二步:创建命令类

根据配置文件我们创建如下类

文件: app/code/Aqrun/HelloWorld/Console/Sayhello.php

setName('示例:sayhello');
        $this->setDiscription('示例命令');
        parent::configure();
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $output->writeln('你好世界');
    }
}

函数中实现了两个方法:

  • configure() 函数用来设置名称、描述、命令行参数
  • execute() 函数会在控制台调用命令时执行

类的定义完成后清空缓存,执行如下命令:

php magento list

可以输出所有可用命令,我们刚添加的自定义命令也在:

14.Magento 2 中如何添加控制台命令_第1张图片
14-cli-list1.png

现在可以在控制台运行 php bin/magento example:sayhello

14-cli-list1-result.png

接下来可以给命令添加一些参数。

代码如下:

setName('example:sayhello')
            ->setDescription('示例命令')
            ->setDefinition($options);
        parent::configure();
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        if ($name = $input->getOption(self::NAME)) {
            $output->writeln('你好' . $name);
        } else {
            $output->writeln('你好世界');
        }
    }
}

代码中我们在 configure() 函数中定义了命令行参数 name,并在 execute() 方法中获取它的值。清空缓存然后运行 php bin/magento example:sayhello --name=Aqrun 就会输出 “你好Aqrun”。

你可能感兴趣的:(14.Magento 2 中如何添加控制台命令)