https://github.com/symfony/symfony
Composer
Composer is a tool for dependency management in PHP. It allows you to declare the dependent libraries your project needs and it will install them in your project for you.
Components used by this project
Console
Filesystem
Finder
PHPUnit Bridge
Process
https://symfony.com/projects/composer
symfony/console 是什么#
首先要明白 symfony/console 是什么?
它是 symfony 里面的一个控制台命令组件,更优秀的事 symfony 的组件各自都保持独立,不需要其他依赖。这就意味着我们可以在任意我们想要的地方去使用。
如何编写 console 脚本
composer 安装 symfony/console 组件。
按照规范编写 console 应用程序(等于 artisan )。
按照规范编写 commands (命令)。
大功告成。
安装
composer require symfony/console
编写 console 程序
console_command 文件
#!/usr/bin/env php
<?php
require DIR.’/vendor/autoload.php’;
use Symfony\Component\Console\Application;
use Cmd\ModelCommand;
$application = new Application();
// 注册我们编写的命令 (commands)
$application->add(new ModelCommand());
$application->run();
编写 command 程序
这里需要注意自动加载问题!
“autoload”: {
“psr-4”:{
“Cmd\”: “Cmd”
}
上面一段加入到 composer.json 中。下面是我的最终文件内容
{
“require”: {
“symfony/console”: “^4.2”
},
“autoload”: {
“psr-4”:{
“Cmd\”: “Cmd”
}
}
}
ModelCommand.php
<?php
namespace Cmd;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
class ModelCommand extends Command
{
protected function configure()
{
$this
// 命令的名称 (”php console_command” 后面的部分)
->setName(‘model:create’)
// 运行 “php console_command list” 时的简短描述
->setDescription(‘Create new model’)
// 运行命令时使用 “–help” 选项时的完整命令描述
->setHelp(‘This command allow you to create models…’)
// 配置一个参数
->addArgument(‘name’, InputArgument::REQUIRED, ‘what's model you want to create ?’)
// 配置一个可选参数
->addArgument(‘optional_argument’, InputArgument::OPTIONAL, ‘this is a optional argument’);
}
protected function execute(InputInterface $input, OutputInterface $output)
{
// 你想要做的任何操作
$optional_argument = $input->getArgument('optional_argument');
$output->writeln('creating...');
$output->writeln('created ' . $input->getArgument('name') . ' model success !');
if ($optional_argument)
$output->writeln('optional argument is ' . $optional_argument);
$output->writeln('the end.');
} }
https://learnku.com/articles/22667
Symfony的Console组件的简单使用。
本文目的是多Symfony的Console组件进行简单的使用。
达到这样的效果:
输入
php console test
输出
hello console.
准备工作
我们这里使用composer来进行Console组件的安装 composer安装教程
进入项目路径:
cd ~/web/project/
安装Console组件:
composer require symfony/console @stable
创建自己的代码目录:
mkdir -p src/Mycmd # 创建自己的代码目录
注册命名空间:
编辑 composer.json 文件如下,然后在命令行输入composer dump-autoload :
{
“require”: {
“symfony/console”: “@stable”
},
“autoload”: {
“psr-4”:{
“Mycmd\”: “src/Mycmd”
}
}
}
编写命令文件
创建要执行的命令文件:
在 src/Mycmd 路径下创建 TestCmd.php 文件,并写入:
<?php
namespace Mycmd;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
/**
*/
class TestCmd extends Command
{
public function __construct($msg)
{
$this->msg = $msg;
parent::__construct();
}
protected function configure()
{
$this->setName(‘test’);
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln(“
}
}
在项目根目录下,创建Console组件的入口文件 console 并写入:
#!/usr/bin/env php
<?php
require DIR.’/vendor/autoload.php’;
use Mycmd\TestCmd;
use Symfony\Component\Console\Application;
$application = new Application();
$application->add(new TestCmd(“hello console”));
$application->run();
使用Console组件
在命令行中输入:
php console test
这时会看见
hello console
代码分析
首先说说我们自己的命令文件: TestCmd.php
<?php
namespace Mycmd;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
/**
*/
class TestCmd extends Command
{
public function __construct($msg)
{
$this->msg = $msg;
parent::__construct();
}
protected function configure()
{
$this->setName(‘test’);
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln(“
}
}
代码中包含一个类 TestCmd 并继承了 Command 基类。
configure 方法中设置了命令的名称 test,即 php console test 命令中的最后一个单词
execute 方法中定义了该命令的执行过程,即输出 $this->msg
再看看入口文件 console
#!/usr/bin/env php
<?php
require DIR.’/vendor/autoload.php’;
use Mycmd\TestCmd;
use Symfony\Component\Console\Application;
$application = new Application();
$application->add(new TestCmd(“hello console”));
$application->run();
这里的 $application->add() 方法将我们定义的 TestCmd 添加到了命令行中。
Symfony官方文档:
http://symfony.com/doc/current/components/console/introduction.html
https://segmentfault.com/a/1190000005084734