Как убрать параметр p из URL?

Чтобы удалить параметр "p" из URL в Symfony, вы можете использовать маршруты и конфигурацию маршрутизатора для определения, какие параметры будут передаваться в URL, и каким образом.

  1. Используйте аннотацию @Route для определения маршрута в вашем контроллере:
/**
 * @Route("/example/{id}", name="example_route")
 */
public function exampleAction($id)
{
    // your code here
}
  1. Выведите ссылку на этот маршрут в шаблоне с помощью функции path:
<a href="{{ path('example_route', {'id': 123}) }}">Example Link</a>

Здесь example_route - это имя маршрута из аннотации в вашем контроллере, а {'id': 123} - массив с параметрами, которые вы хотите передать в URL.

  1. После этого, если вы хотите удалить параметр "p" из URL, вы можете просто не включать его в URL при генерации ссылок:
<a href="{{ path('example_route') }}">Example Link without parameter</a>

Таким образом, если URL ранее был /example/123?p=456, то после выполнения этих шагов он будет изменен на /example/123.

  1. Если вы хотите, чтобы параметр "p" не влиял на обработку маршрута, вы можете удалить его из конфигурации маршрута:
/**
 * @Route("/example/{id}", name="example_route", requirements={"id"="d+"})
 */
public function exampleAction($id)
{
    // your code here
}

В этом случае, при использовании функции path для генерации ссылки, параметр "p" не будет включен в URL:

<a href="{{ path('example_route', {'id': 123, 'p': 456}) }}">Example Link</a>
  1. Если вам необходимо удалить параметр "p" из уже существующих URL, вы можете воспользоваться функцией UriSigner. Пример:
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentRoutingGeneratorUrlGeneratorInterface;

public function exampleAction(Request $request, UrlGeneratorInterface $urlGenerator)
{
    $url = $request->getUri();
    $urlWithoutP = $urlGenerator->removeQueryVar($url, 'p');
    // your code here
}

Здесь переменная $url содержит текущий URL, а функция removeQueryVar удалит параметр "p" из URL.