Twigテンプレートの現在のパスを取得するためのコードを探しました(完全なURLではなく)。つまりhttp://www.sitename.com/page
、必要ではなく、必要なだけです/page
。
{{ app.request.getBaseUrl ~ app.request.getPathInfo }}
(getBaseUrl
ビットはオプションです。ドメインのルートにインストールされていない場合にのみ必要です)
Twigテンプレートの現在のパスを取得するためのコードを探しました(完全なURLではなく)。つまりhttp://www.sitename.com/page
、必要ではなく、必要なだけです/page
。
{{ app.request.getBaseUrl ~ app.request.getPathInfo }}
(getBaseUrl
ビットはオプションです。ドメインのルートにインストールされていない場合にのみ必要です)
回答:
{{ path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) }}
それをビュー変数に読み込みたい場合:
{% set currentPath = path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) %}
app
グローバルビューの変数は、以下のような便利なショートカットのすべての種類、含まれているapp.session
とapp.security.token.user
、その参照あなたがコントローラで使用する可能性のあるサービスを。
Uncaught PHP Exception PHPUnit_Framework_Error_Notice: "Undefined index: REQUEST_URI"
取得現在のURLを:{{ app.request.uri }}
でsymfonyの2.3、3、4、5
パスのみを取得:({{ app.request.pathinfo }}
パラメーターなし)
リクエストURIを取得:({{ app.request.requesturi }}
パラメーター付き)
{{ app.request.pathinfo }}
は、次の場所で利用可能なメソッドのリストのみを試すか参照してください/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
uri
パラメータ付きのURLを取得します。 pathinfo
パスを取得NOのパラメータを。 requestUri
パスWITHパラメータを取得します。 requestUri
この回答IMOに追加する必要があります。ドメインが必要になることはほとんどありません。また、パラメーターを削除することはほとんどありません。
symfony 2.1ではこれを使うことができます:
{{ path(app.request.attributes.get('_route'),
app.request.attributes.get('_route_params')) }}
symfony 2.0では、1つの解決策はこれのためのtwig拡張を書くことです
public function getFunctions()
{
return array(
'my_router_params' => new \Twig_Function_Method($this, 'routerParams'),
);
}
/**
* Emulating the symfony 2.1.x $request->attributes->get('_route_params') feature.
* Code based on PagerfantaBundle's twig extension.
*/
public function routerParams()
{
$router = $this->container->get('router');
$request = $this->container->get('request');
$routeName = $request->attributes->get('_route');
$routeParams = $request->query->all();
foreach ($router->getRouteCollection()->get($routeName)->compile()->getVariables() as $variable) {
$routeParams[$variable] = $request->attributes->get($variable);
}
return $routeParams;
}
そしてこのように使います
{{ path(app.request.attributes.get('_route'), my_router_params()|merge({'additional': 'value'}) }}
ページャーのようにリンクにパラメーターを追加したり、パラメーターの1つを変更したりしない限り、これらすべては必要ありません。
次のようにTwigで現在のURLを取得できます。
{{ app.request.schemeAndHttpHost ~ app.request.requestUri }}
である、あなたはあなたのURLに追加のクエリパラメータを持っている場合ことに留意すべきでありません構成されたルートの一部で場合、受け入れられた回答はそれらを現在のURL(パス)に含めないことに注意してください。
たとえば、キーワードでフィルターできるレコードを含むリストページがあり、ページにページ分割がある場合、 "keyword"および "page"のクエリ変数はルートに含まれない可能性があります。ただし、ページングの進むボタンと戻るボタンでは、現在の完全なURL(次のページが引き続きフィルターされるようにキーワードを含む)が必要です。そして、ページ変数を変更する必要があります。
したがって、現在のルートを取得して、追加の変数をマージできます(これらの追加の変数の1つ以上を変更した後)。独自の変数をにマージしてから、app.request.query.all
その配列をにマージすることに注意してくださいapp.request.attributes.get('_route_params')
。このpath()
方法では、ルートに必要なすべてのパラメータを指定する必要があるため、を含める必要があります_route_params
。
{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|merge(app.request.query.all|merge({'page': 2 }))) }}
これは本当に醜いですが、ページネーションを開発している場合は、個別のリンクごとにページ変数を変更する必要があるため、毎回すべてを含める必要があります。おそらく他の人がより良い解決策を持っています。
{{ path(app.request.attributes.get('_route'), app.request.query.all|merge(app.request.attributes.get('_route_params'))) }}
Silex 2を使用している場合、Requestオブジェクトにアクセスできなくなります。
この方法で現在のリクエスト属性にアクセスできます。
app.request_stack.currentrequest.attributes.get('_route')
そして、完全な現在のURLを生成するには:
path(app.request_stack.currentrequest.attributes.get('_route'), app.request_stack.currentrequest.attributes.get('_route_params'))
global.request.attributes.get('_route')
。Twigブリッジが必要です。