У меня есть команда, которая прослушивает через 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 () не может быть найден (даже если он существует и ожидает два параметра). Я также не уверен, что «перенаправление» действительно то, что я здесь.
Есть ли какой-либо другой способ вызова функции контроллера в команде или каким-либо другим способом, который сделал бы это возможным?
Если у вашего контроллера нет обязательных параметров, вы можете просто создать контроллер как новый объект и вызвать функцию.
$controller = new TransactionController();
$controller->assignUser([
'transId' => $trans_id,
'userId' => $user_id
]);
Других решений пока нет …