Попытка получить свойство необъекта в json из API - PullRequest
0 голосов
/ 24 апреля 2020

Я использую Discord API, чтобы члены гильдии Discord отображали 10 случайных пользователей и отображали их в виде с лезвием, используя метод foreach.

Я получаю JSON из API, получая из него массив members и собирая его так, чтобы он возвращал только 10 членов для отправки его из контроллера в представление.

Проблема в том, что, когда я хочу проанализировать его и использовать элемент массива (avatar_url), он не работает, и я получаю это сообщение об ошибке: Trying to get property 'avatar_url' of non-object

Вот мой контроллер

class IndexController extends Controller {

    ...

    /**
     * Function to get 10 random players on fivem
     * @return array
     */
    private function getServerPlayers() {
        $request = file_get_contents('https://discordapp.com/api/guilds/683766194884575355/widget.json');
        $decoded = json_decode($request, true)['members'];

        return array_slice($decoded, 0, 10);
    }

    /**
     * Return index view
     * @return Factory|View
     */
    public function index() {

        return view('index')->with('players', $this->getServerPlayers())->with('clients', $this->getServerClients())->with('members', $this->getDiscordMembers());
    }
}

Вот мой взгляд

<div class="row">
                <div class="col-lg-12">
                    <div class="tab-content" id="pills-tabContent">
                        <div class="tab-pane fade show active" id="pills-all-bets" role="tabpanel"
                            aria-labelledby="pills-all-bets-tab">
                            <div class="responsive-table">
                                <table class="table">
                                    <thead>
                                        <tr>
                                            <th scope="col">Nom du joueur</th>
                                            <th scope="col">Statut</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        @foreach($players as $player)
                                        <tr>
                                            <td><img src="{{ $player->avatar_url }}">{{ $player->username }}</td>
                                            <td>En ligne</td>
                                        </tr>
                                        @endforeach
                                    </tbody>
                                </table>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

Я думаю, что проблема вроде тупая, но я заблокирован, мне нужна помощь!

Спасибо.

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

Вы должны использовать avatar_url следующим образом:

<td><img src="{{ $player['avatar_url'] }}">{{ $player['username'] }}</td>

, потому что вы передаете для просмотра массив, а не объект.

0 голосов
/ 24 апреля 2020

Проблема в том, что json_decode возвращает массив, а не объект.

Вы можете передать аргументы представлению, используя:

        return view('index',[
            'players' => $this->getServerPlayers(),
            'clients' => $this->getServerClients(),
            'members' => $this->getDiscordMembers(),
        ]);

И затем отобразить их в представлении используя:

<img src="{{ $player['avatar_url'] }}">{{ $player['username'] }}
...