Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день, нужна помощь! Я новичек в Laravel, по этому что то делаю не так.
Суть задачи из очереди отправлять уведомления через сервис pusher о статусе обработки файла.
Написал простенький класс для этого
Laravel 5.4
PHP 7.1
<?php
namespace Platform\Controllers\Core;
use Pusher\Pusher;
class Notify extends \App\Http\Controllers\Controller {
protected $pusher;
protected $channel;
function __construct($userId)
{
$this->channel = 'pusher-channel-'.$userId;
$options = array(
'cluster' => 'eu',
'encrypted' => true,
'debug'=>true
);
$this->pusher= new Pusher(env('PUSHER_KEY'),
env('PUSHER_SECRET'),
env('PUSHER_APP_ID'),
$options);
// var_dump($this->pusher);
}
public function ImportFileProgress($percent=0){
$data=array('type'=>'success', 'display'=>false, 'event'=>'ImportFileProgress', 'percent'=>$percent);
return $this->pusher->trigger($this->channel,$this->channel,$data);
}
public function ImportFileSuccess($filename){
$data=array('type'=>'success', 'display'=>true, 'event'=>'ImportFileSuccess', 'message'=>trans('global.ImportFileSuccess').': '.basename($filename), 'caption'=>trans('global.ImportFileSuccess'));
return $this->pusher->trigger($this->channel,$this->channel,$data);
}
public function ImportFileError($error){
$data=array('type'=>'error', 'display'=>true, 'event'=>'ImportFileError', 'message'=>trans('global.ImportFileError').': '.$error, 'caption'=>trans('global.ImportFileError'));
return $this->pusher->trigger($this->channel,$this->channel,$data);
}
}
В итоге если вызывать методы ImportFileProgress, ImportFileSuccess, ImportFileError из контроллера Laravel - то уведомления отправляются и все работает как задумано, но если эти методы вызвать из очереди задания, то получаю отлуп от pusher с таким текстом:
Invalid signature: you should have sent HmacSHA256Hex("POST\n/apps/383165/events\nauth_key=2ee43460dbb6e07b105f&auth_timestamp=1503649285&auth_version=1.0&body_md5=d921ab284fa29d779e368403f90ee208", your_secret_key), but you sent "54e6d34a14fe74975a3ac6e39fc18044b2696b5ba33ad83898f7207dce6019ba"
В чем может быть проблема, подскажите?
Не в сети
в том что ты создаёшь объект контроллера и пытаешься вызывать его методы за пределами контекста запроса наверное. контроллеры работают как часть процесса обработки хттп-запросов. если эти методы тебе нужны где-то ещё, их нужно из контроллера выносить в независимый класс.
кроме того, не рекомендуется вызывать env() за пределами конфига. парсинг /.env не бесплатен в плане производительности, и если конфиг на продакшене можно закэшировать с artisan config:cache, то .env не кэшируется…
Не в сети
Страницы 1