Как исправить ошибку 404, когда у пользователя нет фото? - PullRequest
0 голосов
/ 23 сентября 2019

Я использую API-интерфейсы laravel и microsoft-graph.

Мне нужно получить фотографию моих пользователей, но у некоторых ее нет, и для них API возвращает ошибку 404, которая блокирует мою страницу.я не хочу помещать фотографию профиля по умолчанию для пользователей, у которых ее нет, но я не знаю, как передать ошибку 404.

есть то, что делает мой код:

$photoLink = '/users\/' . $value['email'] . '/photos/240x240';
$photo = $graph->createRequest('GET', $photoLink . '/$value')->execute();
$photo = $photo->getRawBody();
$meta = $graph->createRequest("GET", $photoLink)->execute();
$meta = $meta->getBody();
echo '<img src="data:'.$meta["@odata.mediaContentType"].';base64,'.base64_encode($photo).'" />';

код ошибки: GuzzleHttp \ Exception \ ClientException, выдаваемый с сообщением «Ошибка клиента: GET https://graph.microsoft.com/v1.0/users/XXX@XXX.com/photos/240x240/$value привел к ответу 404 Not Found: {" error ": {" code ":" ErrorItemNotFound "," message ":"Фотография не найдена. "," InnerError ": {(усечено ...)"

1 Ответ

2 голосов
/ 23 сентября 2019

Я не знаком с этим API, но похоже, что вы пытаетесь достичь , что .

Я могу видеть из теста microsoft graphql, что они выдают GraphException, когда возвращая ошибку 404 .

Следующее решение должно решить вашу проблему:

use GuzzleHttp\Exception\ClientException;

try {   
    $photoLink = '/users\/' . $value['email'] . '/photos/240x240';
    $photo = $graph->createRequest('GET', $photoLink . '/$value')->execute();
    $photo = $photo->getRawBody();
    $meta = $graph->createRequest("GET", $photoLink)->execute();
    $meta = $meta->getBody();
    echo '<img src="data:'.$meta["@odata.mediaContentType"].';base64,'.base64_encode($photo).'" />';
} catch (ClientException $e) {
    if ($e->getStatusCode() === '404') {
        echo '<img src="MYDEFAULTIMAGEURL" />';
    }
}

РЕДАКТИРОВАТЬ: Код обновлен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...