laravel 脚本执行函数

一、创建命令类

php artisan make:command Action

二、在 app\Console\Commands 目录下找到Action.php, 粘贴以下代码

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Http\Request;
use Mockery\Exception;
use Symfony\Component\Console\Output\OutputInterface;

class Action extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'action:call {uri}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'php artisan action:call XXController@xxAction?a=2';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }


    /**
     * Execute the console command.
     * @param OutputInterface $output
     * @throws \Illuminate\Contracts\Container\BindingResolutionException
     */
    public function handle(Request $request)
    {
        $url = $this->argument('uri');

        // 获取控制器+方法
        $uri = parse_url($url, PHP_URL_PATH);
        $uri = explode('@', $uri);

        // 获取参数
        parse_str(parse_url($url, PHP_URL_QUERY), $param);

        $controller = $uri[0] ?? '';
        $action = $uri[1] ?? '';
        if (empty($controller) || empty($action)) {
            $this->info('The format (Controller@method) is required');
            return;
        }

        try {
            $container = app()->make("App\Http\Controllers\\" . $controller);
        } catch (Exception $e) {
            $this->info($e->getMessage());
            return;
        }

        if ($param) {
            foreach ($param as $k => $v) {
                $request->offsetSet($k, $v);
            }
        }

        $result = app()->call([$container, $action], $param);
        $this->info($result);
    }
}

三、在 app/Console/Kernel.php 中的 $commands 增加该命令类

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


四、如何执行

php artisan action:call XXController@xxAction

XXController 代表是控制器,xxAction是控制器某个方法
 

五、可能遇到问题:

执行Laravel的artisan命令时报错,提示:Could not open input file: artisan。

CD切换到Laravel项目根目录再次执行即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值