gpt4 book ai didi

php - 从 Laravel 中的命令调用 Controller 方法

转载 作者:IT王子 更新时间:2023-10-29 06:08:50 42 4
gpt4 key购买 nike

我有一个通过 Redis Pub/Sub 监听的命令。收到 Publish 后,我想调用 Controller 方法以便更新数据库。

但是,关于如何从项目内部但在路由外部调用带有参数的 Controller 方法,我还没有找到任何解决方案。我见过的最接近的东西是这样的:

    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()(即使它存在并且需要两个参数)。我也不确定“重定向”是否真的是我想要的。

有没有其他方法可以在命令中调用 Controller 函数,或者有其他方法可以做到这一点?

最佳答案

如果您的 Controller 没有任何必需的参数,您可以将 Controller 创建为一个新对象,然后调用该函数。

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

关于php - 从 Laravel 中的命令调用 Controller 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54028760/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com