2016-11-21 16 views
1

Meine Idee ist, https Anfrage an alle URLs in meiner Datenbank gespeichert mit einem Modell namens Notifications senden.laravel: http Anfrage gab Fehler

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

Aus irgendeinem Grund die get-Methode String erwartet, und es gab mir eine Fehlermeldung:

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

Wie kann ich dieses Problem beheben? Jeder mit einer besseren Idee?
das ist eigentlich meine Benachrichtigungsklasse

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(); 
    } 

Antwort

0

Sie einfach sagen, verwenden eine Client Klasse, aber es gibt keine Spur von Verwendung Aussagen hier, weil Sie den gesamten Code nicht bist zeigt, die für uns notwendig ist finde es heraus. Wir wissen nicht einmal, was die get Methodenparameter sind. Meine Vermutung ist, dass Sie ein Array von Notification Klasseneinheiten zurück von dieser Anweisung erhalten: $notes=Notification::all();.

Also zuerst sollten Sie über sie iterieren und dann Sie den Client auf jedem von ihnen aufrufen. Aber auch dann müssen Sie möglicherweise nur eine Zeichenfolge an die get Methode bereitstellen. Ich kann nicht sagen, wie es da keinen Code über die Klasse Notification gibt.

EDIT:

Da der Code Ihnen zur Verfügung gestellten ich glaube, Sie mit so etwas wie dies versuchen sollte:

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

Namensraum App; Verwenden Sie App \ Status; Verwenden Sie App \ Notification; verwenden Illuminate \ Database \ Eloquent \ Model; Klasse Mitteilung erstreckt Modell { \t protected $ ausfüllbare = [ 'id', 'WEBSITE_URL', 'E-Mail', 'slack_channel', 'check_frequency', 'alert_frequency', 'speed_frequency', 'aktiv']; \t public function Status() { \t \t return $ this-> belongsToMany ('App \-Status') -> withPivot ('Werte') -> withTimestamps(); \t} –

+0

Sie sollten Ihre Frage aktualisieren, anstatt den Code als Kommentar hier zu veröffentlichen. –

+0

Ich habe es hochgeladen! die neuen Codes sehen so aus –

0

Da die Fehlermeldung sagt, die get() Methode des guzzle Client akzeptiert entweder ein String oder eine UriInterface Implementierung. Sie holen die Daten aus dem Notification Modell (das eine Illuminate\Support\Collection nicht ein Array von URIs zurückgibt) und füttern es direkt an den Client. Sie müssen Ihre Daten für den Client vorbereiten. Etwas wie dieses:

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

es macht Sinn. anstelle von get ($ note-> url), sollte es nicht get ($ note-> website_url) sein. Weil der Name der URLs in der Notification-Tabelle in einer Spalte website_url gespeichert ist? –

+0

Ja, sicher. Ich wusste nicht, dass es 'website_url' ist. – sepehr

+0

Tnx funktioniert perfekt! –

Verwandte Themen