Laravel htmlentities() 期望参数 1 为字符串,数组给定

Laravel htmlentities() expects parameter 1 to be string, array given

我正在尝试使用 https://github.com/skmetaly/laravel-twitch-restful-api 包将 twitch 集成到我的网站。

这就是我得到的错误。

ErrorException in helpers.php line 469:
htmlentities() expects parameter 1 to be string, array given (View: /var/www/rafdev.ovh/html/msvixen/resources/views/twitch.blade.php)

我的控制器 $code = Input::get('code');

    if ($code !== null)
    {
        $token = TwitchApi::requestToken($code);
    } else
    {
        $token = null;
    }

    $data = TwitchApi::streamsFollowed($token);

    return view('twitch', ['token' => $token, 'data' => $data]);

我的观点

@extends('master')

@section('content')
    <h1>Twitch.TV</h1>
    {{ $token }}

    {{ $data }}
@endsection

使用后dd()

array:9 [▼
  0 => array:11 [▼
    "_id" => 17733016640
    "game" => "World of Warcraft"
    "viewers" => 15551
    "created_at" => "2015-11-15T22:27:13Z"
    "video_height" => 1080
    "average_fps" => 60.2769481401
    "delay" => 0
    "is_playlist" => false
    "_links" => array:1 [▶]
    "preview" => array:4 [▶]
    "channel" => array:22 [▶]
  ]
  1 => array:11 [▶]
  2 => array:11 [▶]
  3 => array:11 [▶]
  4 => array:11 [▶]
  5 => array:11 [▶]
  6 => array:11 [▶]
  7 => array:11 [▶]
  8 => array:11 [▶]
]

所以它有效,但是当我尝试显示数据时 - 它返回 htmlentities() 错误

发生这种情况是因为 $data 作为数组返回。

调用TwitchApi::streamsFollowed($token);时,Facade调用Skmetaly\TwitchApi\Services\TwitchApiService中的方法。

这又会创建一个 Skmetaly\TwitchApi\API\Users 的实例,并在那里调用 streamsFollowed() 方法。

此方法调用 /streams/followed which returns a data set such as the example below. It's automatically converted to an array rather than JSON using the Guzzle HTTP Client's json() method

{
  "_links": {
    "self": "https://api.twitch.tv/kraken/streams/followed?limit=25&offset=0",
    "next": "https://api.twitch.tv/kraken/streams/followed?limit=25&offset=25"
  },
  "_total": 123,
  "streams": [...]
}

为了显示流,您需要在 $data.

中迭代流数组

如果您要稍微修改您的控制器

return view('twitch', ['token' => $token, 'streams' => $data->streams]);

然后您就可以在您的视图中迭代流。

@foreach($streams as $stream)
    {{ $stream }}
@endforeach

更新: 您会注意到每个流也是一个数组。这意味着您需要选择要显示每个数组中的哪些键。假设在其中一个流中有一个名为 broadcaster 的键,其中包含一个字符串;你可以修改上面的内容如下。

@foreach($streams as $stream)
    {{ $stream['broadcaster'] }}
@endforeach

现在阅读 streams example response documentation 可以看出,流的内容会根据流是否在线而有所不同。注意:这是假设数据结构与您没有在问题中发布流的内容相同。

这意味着离线时,{{ $stream['broadcaster'] }} 可以工作,但在线时就不行了,你会得到同样的错误。您可能需要做的是在 @foreach 中使用 @if @else 块来确定流是否 null,然后再尝试回显部分信息。

您还可以通过从数据中删除空值来过滤控制器中的离线流。