我有這樣的控制器: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