簡體   English   中英

從Laravel中的Command調用Controller方法

[英]Call a Controller method from a Command in Laravel

我有一個通過Redis發布/訂閱監聽的命令。 收到發布后,我想調用一個控制器方法,以便更新數據庫。

但是,我沒有找到關於如何從項目內部但在路由外部使用參數調用控制器方法的任何解決方案。 我所看到的最接近的東西是這樣的:

    return redirect()->action(
        'TransactionController@assignUser', [
               'transId' => $trans_id,
               'userId' => $user_id
        ]);

我嘗試過的完整命令如下所示:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Redis;

class RedisSubscribe extends Command
{

    protected $signature = 'redis:subscribe';

    protected $description = 'Subscribe to a Redis channel';

    public function handle()
    {
        Redis::subscribe('accepted-requests', function ($request) {

            $trans_array = json_decode($request);
            $trans_id = $trans_array->trans_id;
            $user_id = $trans_array->user_id;

            $this->assignUser($trans_id, $user_id);
        });
    }

    public function assignUser($trans_id, $user_id)
    {
         return redirect()->action(
            'TransactionController@assignUser', [
               'transId' => $trans_id,
               'userId' => $user_id
            ]);
    }
}

但是,這似乎不起作用。 當我運行此命令時,出現一個錯誤,找不到assignUser()(即使它存在並且需要兩個參數)。 我也不確定“重定向”是否真的是我在這里追求的目標。

是否有其他方法可以在Command中調用控制器功能,或者有其他方法可以做到這一點?

如果控制器沒有任何必需的參數,則可以將控制器創建為新對象,然后調用該函數。

$controller = new TransactionController();
$controller->assignUser([
           'transId' => $trans_id,
           'userId' => $user_id
        ]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM