У меня есть этот контроллер:Symfony @ParamConverter: исключить использование, если заполнитель не содержит точку
/**
* {@inheritdoc}
*
* @Route("entity/{domain_host}")
* @ParamConverter("entity", class="AppBundle:Entity", options={
* "repository_method" = "findOneByDomainHost",
* "mapping": {"domain_host": "domainHost"},
* "map_method_signature" = true
* })
*/
class EntityController extends Controller
{
...
}
Этот способ URL, как http://example.com/entity/another-example.com
сочетается с действием и соответствующее another-example.com
юридическое лицо увлажненной и прошло к контроллеру.
Теперь этот объект имеет также идентификатор.
Я хотел бы перехватить URL-адрес, например http://example.com/entity/12345
, и перенаправить его на http://example.com/entity/another-example.com
.
Для этого я создал еще один метод в EntityController
:
/**
* {@inheritdoc}
*
* @Route("entity/{domain_host}")
* @ParamConverter("store", class="AppBundle:Entity", options={
* "repository_method" = "findOneByDomainHost",
* "mapping": {"domain_host": "domainHost"},
* "map_method_signature" = true
* })
*/
class EntityController extends Controller
{
public function redirectIdToDomainAction(Request $request)
{
die(dump($request));
// Following will be the redirect logic
}
}
И в моем routing.yml
, НА НАЧАЛО ФАЙЛА:
entity_id_to_domain:
path: /entity/{id}
defaults: { _controller: AppBundle:Entity:redirectIdToDomain }
requirements:
id: ^[^.]*$
methods: [GET]
Практически redirectIdToDomain
действие называется, если заполнитель не содержит точки (точка - это дискриминат: если местозаполнитель имеет точку, передается домен, если нет точки, замещающий объект, вероятно, представляет собой Entity by uts ID, и я должен перенаправить).
Проблема заключается в том, что, поскольку класс контроллера EntityController
использует @ParamConverter
, заполнитель когда-либо интерпретируется как домен, и, следовательно, я получаю AppBundle:Entity object not found.
.
Итак, есть ли способ применить @ParamConverter
, только если у заполнителя есть точка? Или, какие другие подходы я могу использовать, чтобы сделать работу redirectToIdAction
без выброса исключения Not found
?
лучше реализует слушателя для перенаправления материала и/или обычая paramconverter – Matteo
Почему бы не поставить paramconverter на одну акцию который требует его вместо класса, или переместить действие перенаправления за его пределы? – Gerry
«paramconverter» требуется для большего количества действий (около 7). Я думал о возможности перенести действие перенаправления из класса, но я надеялся, что есть еще один вариант, поэтому спросите здесь ... Вместо создания настраиваемого преобразователя параметров я думаю, что создам еще один контроллер, и в нем я поставлю действие перенаправления ... – Aerendir