美文网首页
实现 laravel 的artisan

实现 laravel 的artisan

作者: 也许会了 | 来源:发表于2021-04-13 16:21 被阅读0次

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

    新建目录

    -artisan

    --bin

    --src

    进入artisan composer init

    composer require symfony/console

    #!/usr/bin/env php

    use Symfony\Component\Console\Application;

    use Symfony\Component\Console\Input\InputInterface;

    use Symfony\Component\Console\Output\OutputInterface;

    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

    use Symfony\Component\Console\Application;

    use Symfony\Component\Console\Input\InputInterface;

    use Symfony\Component\Console\Output\OutputInterface;

    use Symfony\Component\Console\Input\InputArgument;

    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

    use Symfony\Component\Console\Application;

    use Symfony\Component\Console\Input\InputInterface;

    use Symfony\Component\Console\Output\OutputInterface;

    use Symfony\Component\Console\Input\InputArgument;

    use Symfony\Component\Console\Input\InputOption;

    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("hello {$name}");

    $output->writeln("hello {$name}");

    $output->writeln("hello {$name}");

    $output->writeln("hello {$name}");

    可以给它们加上颜色

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

    bin/artisan.php

    ArtisanCommand.php

    #!/usr/bin/env php

    use Symfony\Component\Console\Application;

    use Artisan\ArtisanCommand;

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

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

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

    $app->run();

    exit();

    ArtisanCommand.php

    namespace Artisan;

    use Symfony\Component\Console\Application;

    use Symfony\Component\Console\Input\InputInterface;

    use Symfony\Component\Console\Output\OutputInterface;

    use Symfony\Component\Console\Input\InputArgument;

    use Symfony\Component\Console\Input\InputOption;

    use Symfony\Component\Console\Command\Command;

    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("hello {$name}");

            $output->writeln("hello {$name}");

            $output->writeln("hello {$name}");

            $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文档

    本文来自PHP中文网laravel教程的栏目:https://www.php.cn/phpkj/laravel/

    相关文章

      网友评论

          本文标题:实现 laravel 的artisan

          本文链接:https://www.haomeiwen.com/subject/wnrclltx.html