zoukankan      html  css  js  c++  java
  • 实现 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文档



    
    
  • 相关阅读:
    12.3
    团队项目第一阶段冲刺第一天
    4.22
    4.21 re重要功能
    12.1
    12.2
    4.17
    4.16
    css设置子元素相对于父元素保持位置不变(含有滚动条的父元素)
    git操作和npm操作清单
  • 原文地址:https://www.cnblogs.com/sweetsunnyflower/p/11098608.html
Copyright © 2011-2022 走看看