次の簡単なコード:
<li><a href="{{ path('_list') }}">List</a></li>
現在のページがルートとclass="active"
一致する場合に追加する簡単な方法はありますか?_list
テンプレートエンジンとしてsymfony2とtwigの最新のPRリリースを使用
Twig では条件を使用でき、Request オブジェクトはアプリケーション全体で使用できます。テンプレートを含める場合、使用するルートを取得するには:
app.request.attributes.get('_route')
render 関数を使用している場合は、以下を使用します。
app.request.attributes.get('_internal')
これで、次を使用できるようになります。
class="{% if app.request.attributes.get('_route') == '_list' %}active{% endif %}"
またはそれより短い:
class="{{ app.request.get('_route') == '_list' ? 'active' }}"
最短バージョン:
{% set route = app.request.get('_route') %}
<li class="{{ route starts with 'post' ? 'open' }}"></li>
<li class="{{ route starts with 'category' ? 'open' }}"></li>
時々役に立つ:
{% set route = app.request.get('_route') %}
<li class="{{ 'post' in route ? 'open' }}"></li>
<li class="{{ 'category' in route ? 'open' }}"></li>
三項演算子の場合:
{% set route = app.request.attributes.get('_route') %}
<ul class="nav navbar-nav">
<li {{ route == 'profile_index' ? 'class="active"' }}><a href="{{ path('profile_index') }}"><i class="icon-profile position-left"></i> My Profile</a></li>
<li {{ route == 'influencers_index' ? 'class="active"'}}><a href="{{ path('influencers_index') }}"><i class="icon-crown position-left"></i> Influencers</a></li>
<li {{ route == 'task_manager_index' ? 'class="active"'}}><a href="{{ path('task_manager_index') }}"><i class="icon-alarm-check position-left"></i> Task Manager</a></li>
</ul>
このすべてを自動的に処理する非常に優れたバンドルを見つけました。
Twig の Symfony2.3 で、URI を取得するためにこれを試してください:
{{ dump(app.request.server.get("REQUEST_URI")) }}
これが私のやり方です(Symfony 2.6を使用)
<li {% if app.request.get('_route') == '_homepage' %} class="active" {% endif %}><a href="{{ path('_homepage') }}">Student</a></li>
'_homepage'
バンドルのルートインの名前でrouting.yml
、ルートは次のようになります
_homepage:
path: /
defaults: { _controller: CoreBundle:Default:index }