2016-11-21 3 views
1

Моя идея - отправить https-запрос всем URL-адресам, сохраненным в моей базе данных, с помощью модели с именем Notifications.laravel: http request дал ошибку

class guzzleController extends Controller 
{ 
    public function guzzle() { 
     $client = new Client(); 
     $notes=Notification::all(); 
     $response = $client->get($notes); 
     $response=$response->getStatusCode(); 
     var_dump($response); 
    } 
} 

По какой-то причине метода прибудет ожидает строку, и он дал мне ошибку:

InvalidArgumentException in functions.php line 62: URI must be a string or UriInterface

Как я могу это исправить? Кто-нибудь с лучшей идеей?
это на самом деле мой класс уведомление

namespace App; 
use App\Status; 
use App\Notification; 

use Illuminate\Database\Eloquent\Model; 

class Notification extends Model 
{ 
    protected $fillable = ['id','website_url','email','slack_channel','check_frequency','alert_frequency','speed_frequency','active']; 

    public function statuses(){ 
     return $this->belongsToMany('App\Status')->withPivot('values')->withTimestamps(); 
    } 

ответ

0

Вы просто сказать, что вы будете использовать Client класс, но нет никаких следов выписок использования здесь, потому что вы не показывая весь код, который необходим для нас выяснить это. Мы даже не знаем, какие параметры метода get. Я предполагаю, что из этого утверждения вы получаете массив из объектов класса Notification: $notes=Notification::all();.

Так что в первую очередь вам следует перебирать их, а затем вы вызываете клиента на каждом из них. Но также вам может понадобиться предоставить строку только для метода get. Не могу сказать, как нет кода о классе Notification.

EDIT:

Учитывая код условия, что я думаю, вы должны попробовать что-то вроде этого:

class guzzleController extends Controller 
{ 
    public function guzzle() 
    { 
     $client = new Client(); 
     $notes = Notification::all(); 

     foreach ($notes as $note) { 
      $response = $client->get($note->website_url); 
      $response = $response->getStatusCode(); 
      var_dump($response); 
     } 
    } 
} 
+0

namespace App; использование App \ Status; использовать приложение \ уведомление; использование Illuminate \ Database \ Eloquent \ Model; класс Notification расширяет модель { \t защищен $ заполняемых = [ 'ID', 'WEBSITE_URL', 'электронная почта', 'slack_channel', 'check_frequency', 'alert_frequency', 'speed_frequency', 'активный']; \t функция статусы общественной() { \t \t возвращение $ this-> belongsToMany ('App \ Status') -> withPivot ('значение') -> withTimestamps(); \t} –

+0

Вы должны обновить свой вопрос, а не размещать код в качестве комментария здесь. –

+0

Я загрузил его! новые коды выглядят так: –

0

Как сказано в сообщении об ошибке, get() метода в жрать клиент принимает либо строка или a UriInterface реализация. Вы извлекаете данные из модели Notification (которая возвращает Illuminate\Support\Collection, а не массив URI) и передает ее непосредственно клиенту. Вам необходимо подготовить свои данные для клиента. Что-то вроде этого:

use Notification; 
use GuzzleHttp\Client; 

class GuzzleController extends Controller 
{ 
    public function guzzle() 
    { 
     $client = new Client(); 
     $notes = Notification::all(); 

     // To do this in a more Laravelish manner, see: 
     // https://laravel.com/docs/5.3/collections#method-each 
     foreach ($notes as $note) { 
      // Assuming that each $note has a `website_url` property 
      // containing the URL you want to fetch. 
      $response = $client->get($note->website_url); 

      // Do whatever you want with the $response for this specific note 
      var_dump($response); 
     } 
    } 
} 
+0

имеет смысл. вместо get ($ note-> url), не следует ли получать ($ note-> website_url). потому что имя URL-адресов сохраняется в таблице уведомлений в столбце website_url? –

+0

Да, конечно. Я не знал, что это 'website_url'. – sepehr

+0

tnx работает отлично! –

Смежные вопросы