我有这样的控制器: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
{
...
}
这样像http://example.com/entity/another-example.com
一个URL时动作匹配和相应another-example.com
实体是水合,并通过到控制器。现在
,这个实体也有一个ID。
我想拦截的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
动作,如果占位符称为不包含点(点是discrimen:如果占位符有一个点,一个域名通过,如果没有点,占位符可能代表的实体由UTS ID,我必须重定向)。
问题是,由于控制器类EntityController
使用@ParamConverter
,占位符永远被解释为一个域,结果是我得到一个AppBundle:Entity object not found.
。
那么,有没有申请只有占位符有一个点的@ParamConverter
的方法吗?或者,我可以使用其他哪些方法使redirectToIdAction
工作,而不会抛出Not found
异常?
更好地实现对重定向的东西和/或paramconverter – Matteo
定制的监听器为什么不把paramconverter上一个动作需要它而不是课程,还是将重定向操作移出课程? – Gerry
更多操作(约7)需要'paramconverter'。我曾考虑过将重定向操作移出课程的可能性,但我希望有另外的选择,所以在这里提出...不是创建一个自定义参数转换器,而是创建另一个控制器,然后在其中放入重定向动作... – Aerendir