У меня есть команда 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
? Или я все делаю неправильно? Насколько я понимаю, контроллеры должны передавать информацию, поэтому кажется, что это правильный путь. Или я должен использовать другой стиль кодирования / архитектуры для выполнения этой задачи?
Если вам нужно всего лишь сохранить запись в базе данных, я бы предложил использовать модель здесь. Затем вы можете включить вашу модель непосредственно в вашу команду и использовать 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);
}
}
}
Других решений пока нет …