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

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

1. Используйте аннотацию @Route для определения маршрута в вашем контроллере:

/**
 * @Route("/example/{id}", name="example_route")
 */
public function exampleAction($id)
{
    // your code here
}

2. Выведите ссылку на этот маршрут в шаблоне с помощью функции path:

<a href="{{ path('example_route', {'id': 123}) }}">Example Link</a>

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

3. После этого, если вы хотите удалить параметр "p" из URL, вы можете просто не включать его в URL при генерации ссылок:

<a href="{{ path('example_route') }}">Example Link without parameter</a>

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

4. Если вы хотите, чтобы параметр "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>

5. Если вам необходимо удалить параметр "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.