0

コントローラー アクションに次のルート アノテーションがあるとします。

* @Route("/post/{post_id}/", name="post.view")
* @Route("/post/", name="post.current_view")

そして、小枝を使用してこの URL を生成したいと考えています。

{{ url(basePath~'view', {'post_id':post.postId}) }}
//basePath will either be "post." or "post.current_"

私が現在得ているものは次のとおりです。

domain.com/post/1/
domain.com/post/?post_id=1

私が望むのは、渡された「EXTRA」パラメーターを無視して2番目のルートを生成することです。

domain.com/post/

これがネイティブに達成できるものかどうかは誰にも分かりますか? ルーターを使用するカスタム twig 関数を修正できることはわかっています。その後、ルートを生成してクエリ文字列を削除できますが、見逃した場所に簡単な切り替えがある場合は避けたいと思います。

4

2 に答える 2

1

解決策 #1 if 句を追加するだけです

{% if BasePath == 'post.' %}
    {{ url(BasePath~'view', {'post_id':post.postId}) }}
{% elseif BasePath == 'post.current_' %}
    {{ url(BasePath~'view') }}
{% endif %}

最もエレガントではないかもしれませんが、うまくいくはずです。

解決策 2

URL を疑問符で分割し、最初の文字列を取得する

{% set myUrl = url(basePath~'view', {'post_id':post.postId}) %}
{{ myUrl|split("?")|first }}

解決策 #3または、twig の RoutingExtension クラスを拡張して url 関数をオーバーライドすることもできます。

Symfony\Bridge\Twig\Extension\RoutingExtension

ここで例を見つけることができますpathurl、同じである必要があります。

この関数をオーバーライドする必要があります

 public function getUrl($name, $parameters = array(), $schemeRelative = false)
    {
        return $this->generator->generate($name, $parameters, $schemeRelative ? UrlGeneratorInterface::NETWORK_PATH : UrlGeneratorInterface::ABSOLUTE_URL);
    } 

関数は次のようになります。

public function getUrl($name, $parameters = array(), $schemeRelative = false)
{
   $yourUrl = parent::getUrl($name, $parameters = array(), $schemeRelative = false);
   return strstr($yourUrl, '?' , true);
}

what id oes は、疑問符の後のすべてを削除します。

デフォルトのクラスをオーバーライドするには、パラメーターに追加する必要があります

twig.extension.routing.class: MyNamespace\MyRoutingExtension
于 2014-09-05T09:18:37.827 に答える
0

そうではないと思いますが、 preg_replace フィルターが必要で、これはネイティブに定義されていません

于 2014-09-05T08:34:17.990 に答える