Вызов метода контроллера из команды в Laravel - PullRequest
0 голосов
/ 03 января 2019

У меня есть команда, которая прослушивает через 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 () не может быть найден (даже если он существует и ожидает два параметра).Я также не уверен, что «перенаправление» действительно то, что мне нужно здесь.

Есть ли какой-либо другой способ вызова функции контроллера в команде или каким-либо другим способом, который сделал бы это возможным?

1 Ответ

0 голосов
/ 03 января 2019

Если ваш контроллер не имеет каких-либо обязательных параметров, вы можете просто создать контроллер как новый объект и вызвать функцию.

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