我有一个通过Redis Pub/Sub监听的命令。当接收到发布时,我想调用一个控制器方法,以便可以更新数据库。
然而,我还没有找到任何关于如何从项目内部但在路由外部调用带参数的控制器方法的解决方案。我见过的最接近的东西是这样的:
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() (即使它存在并且需要两个参数)。我也不确定“重定向”是否真的是我想要的。
有没有其他方法可以在命令中调用控制器函数,或者有其他方法可以做到这一点?
发布于 2019-01-04 03:42:35
如果您的控制器没有任何必需的参数,您可以将控制器创建为一个新对象,然后调用该函数。
$controller = new TransactionController();
$controller->assignUser([
'transId' => $trans_id,
'userId' => $user_id
]);
https://stackoverflow.com/questions/54028760
复制相似问题