Как отключить конечный редирект косой черты в Symfony 4.1? - PullRequest
0 голосов
/ 08 октября 2018

Я бы хотел отключить поведение по умолчанию Symfony 4.1 , которое перенаправляет пользователей с /foo/ на /foo.Какой лучший способ отключить это поведение?Я разрабатываю API, поэтому мне не нужны эти перенаправления.

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

Чтобы улучшить ответ NicolasB, я думаю, проверка косой черты при каждом запросе в одном EventSubscriber могла бы помочь.Несмотря на то, что это решение немного хитрое, мне кажется, что это решение более приемлемо.

0 голосов
/ 12 октября 2018
Решение

@ NicolasB слишком хакерское, поэтому я создал пользовательский прослушиватель событий, который проверяет все ответы с помощью перенаправлений и преобразует их в ошибку 404:

<?php

namespace App\EventListener;

use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class RedirectionListener
{
    public function onKernelResponse(FilterResponseEvent $event): void
    {
        $response = $event->getResponse();

        if ($response->isRedirection()) {
            throw new NotFoundHttpException();
        }
    }
}

Дон 'не забудьте зарегистрировать его:

App\EventListener\RedirectionListener:
  tags:
  - { name: kernel.event_listener, event: kernel.response }

Примечание: все перенаправления будут преобразованы в 404, а не только редиректы с косой чертой.Вы должны иметь это в виду.Однако я занимаюсь разработкой API, поэтому мне вообще не нужны перенаправления, поэтому это решение решает мою проблему.

Если вы знаете лучшее решение, вы можете опубликовать еще один ответ!

0 голосов
/ 08 октября 2018

Если вы знаете, что каждый отдельный маршрут , заканчивающийся косой чертой, должен генерировать 404, вы можете просто определить маршрут, который:

/**
 * @Route("{anything}/")
 */
public function routeWithTrailingSlashAction()
{
    throw new ResourceNotFoundException();
}

Я предполагаю, что может бытьболее правильный способ сделать это, но я думаю, что это должно работать, по крайней мере, как временное исправление.

...