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

时间:2015-11-15 23:57:48

标签: php laravel twitch

我尝试使用https://github.com/skmetaly/laravel-twitch-restful-api软件包来整合我的网站。

这是我得到的错误。

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 =输入:: get('代码');

    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()错误

1 个答案:

答案 0 :(得分:1)

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

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

这反过来会创建Skmetaly\TwitchApi\API\Users的实例并在那里调用streamsFollowed()方法。

此方法调用/streams/followed,返回一个数据集,如下例所示。它使用Guzzle HTTP Client的json() method自动转换为数组而不是JSON。

{
  "_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'] }}会起作用,但在线时它不会,你会得到同样的错误。您可能需要做的是在@if @else中使用@foreach块来确定流是否为null,然后再尝试回复部分信息。

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