が含まれていない場合は使用を除外する:http://example.com/entity/another-example.com
のようなURLがアクションにマッチしていると、対応するanother-example.com
実体が水和され、渡された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
{
...
}
をこの方法でコントローラに送信します。
今、このエンティティにはIDもあります。
http://example.com/entity/12345
のようなURLを傍受し、http://example.com/entity/another-example.com
にリダイレクトしたいとします。
/**
* {@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
では、ファイルの先頭に:
redirectIdToDomain
アクションが呼び出された
entity_id_to_domain:
path: /entity/{id}
defaults: { _controller: AppBundle:Entity:redirectIdToDomain }
requirements:
id: ^[^.]*$
methods: [GET]
私はEntityController
で別のメソッドを作成し、これを行うには
ドットは含まれていません(ドットはdiscrimenです。プレースホルダにドットがある場合はドメインが渡され、ドットがない場合はプレースホルダはおそらくuts IDでエンティティを表し、リダイレクトする必要があります)。
コントローラークラスEntityController
が@ParamConverter
を使用しているため、プレースホルダーがドメインとして解釈され、結果としてAppBundle:Entity object not found.
が得られるという問題があります。
したがって、プレースホルダにドットがある場合にのみ、@ParamConverter
を適用する方法はありますか?または、Not found
例外をスローせずにredirectToIdAction
を動作させるために使用できる他の方法はありますか?
より良いが、リダイレクトのものおよび/または1つのアクションにparamconverterを入れていないのはなぜ – Matteo
paramconverterカスタムのリスナーを実装しますそれはクラスの代わりにそれを必要とするか、またはあなたのリダイレクトアクションをその外に移動しますか? – Gerry
'paramconverter'はもっと多くのアクションで必要です(約7)。私はクラスからリダイレクトアクションを移動する可能性について考えましたが、別のオプションがあることを願っていました。ここで尋ねられました。カスタムのパラメータコンバータを作成する代わりに、別のコントローラを作成し、リダイレクトアクション... – Aerendir