Symfony игнорировать код статуса 404 для запроса на получение - PullRequest
1 голос
/ 14 апреля 2020

У меня есть приложение, которое позволяет пользователям создавать пожелания. Я использую заголовок каждого wi sh, чтобы сделать запрос API, чтобы unspla sh загрузить изображение. Теперь у меня есть проблема, что пользователь может ввести заголовок, который не возвращает никаких изображений из unspla sh. В этом случае я хотел бы использовать изображение-заполнитель, но мой код останавливается после получения ошибки 404. Есть ли способ игнорировать эту ошибку и просто продолжить мой l oop?

 public function fetchImagesFromUnsplash() {

    $wishes = $this->repository->findAll();
    foreach ($wishes as $wish) {
            try {
                $response = $this->httpClient->request('GET', 'https://api.unsplash.com/photos/random', [
                    'query' => [
                        'query' => $wish->getDescription(),
                        'client_id' => 'oa1DsGebE8ehCV9SrvcA1mCx-2QfvnufUKgsIY5N0Mk'
                    ]
                ]);

            } catch (TransportExceptionInterface $e) {
            }

            if ($response) {
                $data = $response->getContent();
                $data = json_decode($data, true);
                $imageLink = $data['urls']['raw'];
                $rawImage = file_get_contents($imageLink);

                if ($rawImage) {
                    file_put_contents("public/images/" . sprintf('imageWish%d.jpg', $wish->getId()), $rawImage);
                    $wish->setImagePath(sprintf('public/images/imageWish%d.jpg', $wish->getId()));
                } else {
                $wish->setImagePath('placeholder.png');
                }
                $this->em->flush();
            }
        }
    }

РЕДАКТИРОВАТЬ:

Я пытался это:

  public function fetchImagesFromUnsplash() {

    $wishes = $this->repository->findAll();
    foreach ($wishes as $wish) {
            try {
                $response = $this->httpClient->request('GET', 'https://api.unsplash.com/photos/random', [
                    'query' => [
                        'query' => $wish->getDescription(),
                        'client_id' => 'oa1DsGebE8ehCV9SrvcA1mCx-2QfvnufUKgsIY5N0Mk'
                    ]
                ]);

            } catch (NotFoundHttpException $e) {
            }

            if ($response) {
                $data = $response->getContent();
                $data = json_decode($data, true);
                $imageLink = $data['urls']['raw'];
                $rawImage = file_get_contents($imageLink);

                if ($rawImage) {
                    file_put_contents("public/images/" . sprintf('imageWish%d.jpg', $wish->getId()), $rawImage);
                    $wish->setImagePath(sprintf('public/images/imageWish%d.jpg', $wish->getId()));
                } else {
                    $wish->setImagePath('placeholder.png');
                }

            }  
        }
    $this->em->flush();

}

но это все еще останавливается после первых 404

1 Ответ

3 голосов
/ 14 апреля 2020

Согласно документации :

Когда код состояния HTTP ответа находится в диапазоне 300-599 (т. Е. 3xx, 4xx или 5xx), ожидается ваш код справиться с этим. Если вы этого не сделаете, методы getHeaders () и getContent () выдают соответствующее исключение

Вы должны проверить $response->getStatusCode() или подготовиться к обработке ClientException (представляющей 4xx коды состояния).

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