一尘不染

通过命令行调用laravel控制器

php

在kohana框架中,我可以使用以下命令通过命令行调用控制器

php5 index.php --uri=controller/method/var1/var2

是否可以通过CLI在Laravel 5中调用我想要的控制器?如果是,该怎么做?


阅读 1338

收藏
2020-05-29

共1个答案

一尘不染

到目前为止,还没有办法(不确定是否会发生)。但是,您可以创建自己的Artisan
Command
来执行此操作。CallRoute使用以下命令创建命令:

php artisan make:console CallRoute

对于Laravel 5.3或更高版本,您需要使用make:command

php artisan make:command CallRoute

这将在中生成命令类app/Console/Commands/CallRoute.php。该类的内容应如下所示:

<?php namespace App\Console\Commands;

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Illuminate\Http\Request;

class CallRoute extends Command {

    protected $name = 'route:call';
    protected $description = 'Call route from CLI';

    public function __construct()
    {
        parent::__construct();
    }

    public function fire()
    {
        $request = Request::create($this->option('uri'), 'GET');
        $this->info(app()['Illuminate\Contracts\Http\Kernel']->handle($request));
    }

    protected function getOptions()
    {
        return [
            ['uri', null, InputOption::VALUE_REQUIRED, 'The path of the route to be called', null],
        ];
    }

}

然后,您需要通过将命令添加到$commands数组中来注册该命令app/Console/Kernel.php

protected $commands = [
    ...,
    'App\Console\Commands\CallRoute',
];

现在,您可以使用以下命令呼叫任何路线

php artisan route:call --uri=/route/path/with/param

请注意,此命令将返回响应,就像发送到浏览器一样,这意味着它在输出的顶部包含HTTP标头。

2020-05-29