Я пытаюсь использовать 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 = 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);
вызывается, Фасад вызывает метод в Skmetaly\TwitchApi\Services\TwitchApiService
,
Это в свою очередь создает экземпляр Skmetaly\TwitchApi\API\Users
и называет streamsFollowed()
метод там.
Этот метод делает вызов /streams/followed
который возвращает набор данных, такой как пример ниже. Он автоматически конвертируется в массив, а не в JSON, используя клиент Guzzle HTTP 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
Прочитав сейчас потоковый пример ответной документации может показаться, что содержимое потока меняется в зависимости от того, подключен ли поток к сети. NB. Предполагается, что структура данных такая же, как если бы вы не разместили содержимое потока в своем вопросе.
Это означает, что в автономном режиме, {{ $stream['broadcaster'] }}
будет работать, но когда он-лайн, это не так, и вы получите ту же ошибку. Что вам, вероятно, нужно сделать, это использовать @if @else
блок в вашем @foreach
определить, является ли поток null
прежде чем пытаться повторить часть информации.
Вы также можете фильтровать автономные потоки в контроллере, удаляя нулевые значения из данных.
Других решений пока нет …