У меня проблема с типом содержимого заголовка в PHP.Позвольте мне объяснить.
Я пытаюсь вернуть изображение и файл PDF в угловое приложение V7.
Этот код для изображения работает нормально:
$im = file_get_contents($image_file_name);
header('content-type: image/png');
echo $im;
Я поправляюськапля в углу.Но если я проверю это для моего файла PDF:
$im = file_get_contents($pdf_file_name);
header('content-type: application/pdf');
echo $im;
В Postman файл PDF работает хорошо, и я могу его скачать.Даже в консоли Chrome я хорошо вижу блоб PDF, но в конце я получил ошибку: «Uncaught TypeError: Возвращаемое значение Core \ App :: run () должно быть экземпляром Core \ Response, возвращается ноль»».Эта ошибка происходит из-за моей архитектуры, потому что я жду экземпляра Response, но архитектура между изображением и pdf одинакова, поэтому я не понимаю, почему первый работает, но не второй.В первом случае Response устанавливается после с эхом, но не во втором ... Но если я проверю это:
$im = file_get_contents($pdf_file_name);
header('content-type: image/png');
echo $im;
Я не получил ошибку (но файлконечно не отображается из-за типа содержимого заголовка).Но Ответ хорошо установлен.Есть идеи?
Это мой файл приложения:
/**
* @param Request $request
* @return Response
*/
public function run(Request $request): Response
{
if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) {
$data = json_decode($request->getContent(), true);
$request->request->replace(is_array($data) ? $data : array());
}
$method = $request->getMethod();
if ($method === 'OPTIONS') {
return new Response(json_encode([]));
}
$uri = $request->getRequestUri();
// Strip query string (?foo=bar) and decode URI
if (false !== $pos = strpos($uri, '?')) {
$uri = substr($uri, 0, $pos);
}
$uri = rawurldecode($uri);
if (isset($_SERVER['REDIRECT_BASE'])) {
$uri = str_replace($_SERVER['REDIRECT_BASE'], '', $uri);
}
$routeInfo = $this->dispatcher->dispatch($method, $uri);
try {
switch ($routeInfo[0]) {
case FastRoute\Dispatcher::NOT_FOUND:
throw new HttpNotFoundException('404 Not Found');
break;
case FastRoute\Dispatcher::METHOD_NOT_ALLOWED:
$allowedMethods = $routeInfo[1];
throw new HttpForbiddenException('Method not allowed : ' . prettyArray($allowedMethods));
break;
case FastRoute\Dispatcher::FOUND:
$handler = $routeInfo[1];
AnnotationRegistry::registerLoader('class_exists');
if (isset($this->requestInterceptor)) {
return $this->requestInterceptor->handleRequest($request, $routeInfo);
}
$vars = $routeInfo[2];
//var_dump($vars);
$response = null;
if (count($vars) > 0) {
$args = [];
foreach ($vars as $k => $v) {
$args[] = $v;
}
$args[] = $request;
$response = call_user_func_array($handler, $args);
} else {
$response = call_user_func($handler, $request);
}
return $response;
break;
}
} catch (QueryException $e) {
return new Response(json_encode($e->getTrace()));
} catch (HttpExceptionInterface $e) {
return $e->asResponse();
}
// return new Response();
return null;
}