• 实现 laravel 的artisan


    laravel 的 artisan 命令行太好用了,换个框架没有这个功能,于是自己学习实现一些,直接上代码

    新建目录

    -artisan

    --bin

    --src

    进入artisan composer init    

    composer require symfony/console

    #!/usr/bin/env php
    <?php

    use SymfonyComponentConsoleApplication;
    use SymfonyComponentConsoleInputInputInterface;
    use SymfonyComponentConsoleOutputOutputInterface;

    require_once __DIR__.'/../vendor/autoload.php';

    $app = new Application('artisan','1.1.1');

    $app->register('artisan')->setCode(function(InputInterface $input, OutputInterface $output){
    $output->writeln('artisan start');
    });

    $app->run();

    exit();

    以上是简单的实现



    #!/usr/bin/env php
    <?php

    use SymfonyComponentConsoleApplication;
    use SymfonyComponentConsoleInputInputInterface;
    use SymfonyComponentConsoleOutputOutputInterface;
    use SymfonyComponentConsoleInputInputArgument;

    require_once __DIR__ . '/../vendor/autoload.php';

    $app = new Application('artisan', '1.1.1');

    $app->register('artisan')
    ->setDescription('myself artisan description')
    ->setCode(
    function (InputInterface $input, OutputInterface $output) {
    $name = $input->getArgument('name');
    $output->writeln("hello {$name}");
    }
    )->addArgument('name', InputArgument::REQUIRED, 'please input your name');

    $app->run();

    exit();

    这里演示了如何接收参数



    #!/usr/bin/env php
    <?php

    use SymfonyComponentConsoleApplication;
    use SymfonyComponentConsoleInputInputInterface;
    use SymfonyComponentConsoleOutputOutputInterface;
    use SymfonyComponentConsoleInputInputArgument;
    use SymfonyComponentConsoleInputInputOption;

    require_once __DIR__ . '/../vendor/autoload.php';

    $app = new Application('artisan', '1.1.1');

    $app->register('artisan')
    ->setDescription('myself artisan description')
    ->setCode(
    function (InputInterface $input, OutputInterface $output) {
    $string = $input->getOption('string');
    $name = $input->getArgument('name');
    if($string == 'lower'){
    $name = strtolower($name);
    }
    if($string == 'upper'){
    $name = strtoupper($name);
    }
    $output->writeln("hello {$name}");
    }
    )->addArgument('name', InputArgument::REQUIRED, 'please input your name')
    ->addOption('string',null,InputOption::VALUE_OPTIONAL,'转换字符串大小','lower')
    ;

    $app->run();

    exit();

    这里演示了如何给命令行添加选项 ./bin/artisan.php artisan ffff --string='upper'   echo FFFF


    $output->writeln("<info>hello {$name}</info>");
    $output->writeln("<error>hello {$name}</error>");
    $output->writeln("<comment>hello {$name}</comment>");
    $output->writeln("hello {$name}");

    可以给它们加上颜色

    接下来将命令行拆分为文件

    bin/artisan.php

    ArtisanCommand.php

    #!/usr/bin/env php
    <?php

    use SymfonyComponentConsoleApplication;
    use ArtisanArtisanCommand;
    require_once __DIR__ . '/../vendor/autoload.php';

    $app = new Application('artisan', '1.1.1');

    $app->add(new ArtisanCommand());

    $app->run();

    exit();


    ArtisanCommand.php

    <?php
    namespace Artisan;

    use SymfonyComponentConsoleApplication;
    use SymfonyComponentConsoleInputInputInterface;
    use SymfonyComponentConsoleOutputOutputInterface;
    use SymfonyComponentConsoleInputInputArgument;
    use SymfonyComponentConsoleInputInputOption;
    use SymfonyComponentConsoleCommandCommand;

    class ArtisanCommand extends Command{
    public function configure()
    {
    $this->setName('artisan');
    $this->setDescription('myself artisan description')
    ->addArgument('name', InputArgument::REQUIRED, 'please input your name')
    ->addOption('string',null,InputOption::VALUE_OPTIONAL,'转换字符串大小','lower');
    }

    public function execute(InputInterface $input, OutputInterface $output)
    {
    $string = $input->getOption('string');
    $name = $input->getArgument('name');
    if($string == 'lower'){
    $name = strtolower($name);
    }
    if($string == 'upper'){
    $name = strtoupper($name);
    }
    $output->writeln("<info>hello {$name}</info>");
    $output->writeln("<error>hello {$name}</error>");
    $output->writeln("<comment>hello {$name}</comment>");
    $output->writeln("hello {$name}");
    }
    }


    composer.json

    {
    "name": "baidu/artisan",
    "authors": [
    {
    "name": "gaobingbing",
    "email": "v_gaobingbing01@baidu.com"
    }
    ],
    "require": {
    "symfony/console": "^4.3"
    },
    "autoload": {
    "psr-4": {
    "Artisan\": "src"
    }
    }
    }

    至此大功告成,还有其他功能可以去看Symfony文档



    
    
  • 相关阅读:
    KNN算法
    mysql必须知道的
    励志的演讲
    30条程序员名言警句
    别人的文章:为什么软件开发,人多,事少,还会工作量大?
    分享一个比较受启发的文章“学历代表过去,能力代表现在,学习力代表未来”
    mvc 学前必知
    启动docker容器 防火墙问题报错 ! -i docker0' failed: iptables: No chain/target/match by that name.
    git指令详解总结
    git reset 版本回退的三种用法总结
  • 原文地址:https://www.cnblogs.com/sweetsunnyflower/p/11098608.html
Copyright © 2020-2023  润新知