Как мне получить доступ к контроллеру из команды в Laravel?

У меня есть команда cron, которая запускает каждую минуту, проверяя состояние веб-трансляции в прямом эфире с помощью их API канала. Он просто проверяет, является ли канал живым или нет, и количество зрителей. В зависимости от определенных условий (например, когда веб-трансляция активна), я хочу, чтобы он подключался к методу в одном из моих контроллеров, который затем create новый экземпляр модели и вставьте его в мою базу данных.

Например, вот fire() метод моего WebcastCheckCommand:

public function fire()
{
$checker = new WebcastChecker();
$checker->check();
}

Где мой класс WebcastChecker выглядит так:

use Carbon\Carbon;

class WebcastChecker {
private $url = 'http://achannel.api.channel.livestream.com/2.0/livestatus.json';

public function check() {
$livestream = json_decode(file_get_contents($this->url));

// Add to Database if livestream is active
if ($livestream->channel->isLive === true) {
// SOME CODE HERE TO GO TO A `CREATE` METHOD ON MY WEBCASTCONTROLLER
}
}
}

У меня уже есть webcastStatusController, но сейчас я не уверен, как подключить мой create метод, поскольку этот запрос является нетрадиционным в том смысле, что он не использует представление или маршрутизацию к конкретному URL.

class WebcastStatusController extends BaseController {
// Via Cron
public method create($channelInfo) {
// Add to db here, update Redis keys
}

// AJAX POST
public method getStatus() {
}
}

Как бы я получить доступ к своему контроллеру из WebcastChecker? Или я все делаю неправильно? Насколько я понимаю, контроллеры должны передавать информацию, поэтому кажется, что это правильный путь. Или я должен использовать другой стиль кодирования / архитектуры для выполнения этой задачи?

0

Решение

Если вам нужно всего лишь сохранить запись в базе данных, я бы предложил использовать модель здесь. Затем вы можете включить вашу модель непосредственно в вашу команду и использовать Eloquent для создания записи. Что-то вроде этого:

class WebcastStatus extends Model {

protected $table = nameOfTable;

}

И тогда в вашей команде:

use Carbon\Carbon;
use path\to\models\WebcastStatus;

class WebcastChecker {
private $url = 'http://achannel.api.channel.livestream.com/2.0/livestatus.json';

public function check() {
$livestream = json_decode(file_get_contents($this->url));

// Add to Database if livestream is active
if ($livestream->channel->isLive === true) {
// http://laravel.com/docs/5.0/eloquent#insert-update-delete

WebcastStatus::firstOrCreate($parameters);
}
}
}
1

Другие решения

Других решений пока нет …