Symfony 忽略获取请求的 404 状态码

Symfony ignore 404 status code for get request

我有一个允许用户创建愿望的应用程序。我用每个愿望的标题发出 api 请求 unsplash 下载图片。我现在遇到了一个问题,即用户可以输入一个标题,该标题没有 return 来自 unsplash 的任何图像。在这种情况下,我想使用占位符图像,但我的代码在收到 404 错误后停止。有没有办法忽略这个错误并继续我的循环?

 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

之后仍然停止

根据 documentation:

When the HTTP status code of the response is in the 300-599 range (i.e. 3xx, 4xx or 5xx) your code is expected to handle it. If you don't do that, the getHeaders() and getContent() methods throw an appropriate exception

您必须检查$response->getStatusCode(),或者准备处理一个ClientException(代表4xx状态代码)。