Symfony FOSRestBundle добавить пользовательский заголовок к ответу - PullRequest
0 голосов
/ 24 апреля 2018

Я использую FOSRestBundle в проекте Symfony 4 to API. Я использую аннотации и в контроллере у меня есть, например,

use FOS\RestBundle\Controller\Annotations as Rest;

/**
 * @Rest\Get("/api/user", name="index",)
 * @param UserRepository $userRepository
 * @return array
 */
public function index(UserRepository $userRepository): array
{
return ['status' => 'OK', 'data' => ['users' => $userRepository->findAll()]];
}

конфиг / пакеты / fos_rest.yaml

fos_rest:
    body_listener: true
    format_listener:
        rules:
            - { path: '^/api', priorities: ['json'], fallback_format: json, prefer_extension: false }
    param_fetcher_listener: true
    view:
        view_response_listener: 'force'
        formats:
            json: true

Теперь я хотел бы добавить свой ответ «X-Total-Found» к моему ответу. Как это сделать?

1 Ответ

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

Вы полагаетесь на FOSRestBundle ViewListener, так что он дает вам ограниченные возможности, такие как невозможность передачи пользовательских заголовков. Для достижения того, что вы хотите, вам нужно будет позвонить с вашего контроллера $this->handleView() и передать ему действительный экземпляр View.

Вы можете использовать фабричный метод View :: create () или ярлык контроллера $this->view(). Оба принимают в качестве аргументов массив ваших данных, код состояния и массив заголовков ответов. Затем вы можете настроить свой собственный заголовок там, но вам придется делать это для каждого вызова.

Другой вариант, который вам удобнее обслуживать, - зарегистрировать прослушиватель / подписчик событий on_kernel_response и каким-то образом передать ему значение вашего пользовательского заголовка (например, вы можете сохранить его в атрибуте запроса).

Это два варианта, которые у вас есть. У вас может быть третий, но я не могу придумать его в минуту.


...