我的想法是使用名为Notifications
的模型向我的数据库中保存的所有网址发送https请求。
class guzzleController extends Controller
{
public function guzzle() {
$client = new Client();
$notes=Notification::all();
$response = $client->get($notes);
$response=$response->getStatusCode();
var_dump($response);
}
}
由于某种原因,get方法需要string,它给了我一个错误:
functions.php第62行中的InvalidArgumentException:URI必须是字符串或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 :(得分:0)
您只是说您正在使用Client
课程,但此处没有使用陈述的痕迹,因为您没有显示所需的所有代码我们想出来了。我们甚至不知道get
方法参数是什么。我的猜测是,您从此声明中获取了Notification
个类实体的数组:$notes=Notification::all();
。
首先,你应该迭代它们,然后在每一个上调用客户端。但是,您可能还需要为get
方法提供一个字符串。无法说明,因为Notification
类也没有代码。
修改强>
考虑到你提供的代码,我认为你应该试试这样的事情:
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);
}
}
}
答案 1 :(得分:0)
正如错误消息所示,guzzle客户端的get()
方法接受字符串或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);
}
}
}