Symfony 3.x 以降、サービス リクエストは request_stack に置き換えられ、Twig 1.12 以降、Twig 拡張宣言が変更されました。
ダニの答えを修正します(https://stackoverflow.com/a/17544023/3665477):
1 -そのための TWIG 拡張機能を定義する必要があります。まだ定義していない場合は、フォルダー構造AppBundle\Twig\Extensionを作成します。
2 -このフォルダー内にファイルControllerActionExtension.phpを作成します。コードは次のとおりです。
<?php
namespace AppBundle\Twig\Extension;
use Symfony\Component\HttpFoundation\RequestStack;
class ControllerActionExtension extends \Twig_Extension
{
/** @var RequestStack */
protected $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
public function getFunctions()
{
return [
new \Twig_SimpleFunction('getControllerName', [$this, 'getControllerName']),
new \Twig_SimpleFunction('getActionName', [$this, 'getActionName'])
];
}
/**
* Get current controller name
*
* @return string
*/
public function getControllerName()
{
$request = $this->requestStack->getCurrentRequest();
if (null !== $request) {
$pattern = "#Controller\\\([a-zA-Z]*)Controller#";
$matches = [];
preg_match($pattern, $request->get('_controller'), $matches);
return strtolower($matches[1]);
}
}
/**
* Get current action name
*
* @return string
*/
public function getActionName()
{
$request = $this->requestStack->getCurrentRequest();
if (null !== $request) {
$pattern = "#::([a-zA-Z]*)Action#";
$matches = [];
preg_match($pattern, $request->get('_controller'), $matches);
return $matches[1];
}
}
public function getName()
{
return 'controller_action_twig_extension';
}
}
3 -その後、TWIG が認識されるようにサービスを指定する必要があります。
app.twig.controller_action_extension:
class: AppBundle\Twig\Extension\ControllerActionExtension
arguments: [ '@request_stack' ]
tags:
- { name: twig.extension }
4 -キャッシュをクリアして、すべてが正常であることを確認します。
php bin/console cache:clear --no-warmup
5 -そして今、私が何も忘れていなければ、TWIG テンプレートでこれらの 2 つのメソッドにアクセスできるようになります: getControllerName()とgetActionName()
6 -例:
{{ getControllerName() }} コントローラーの {{ getActionName() }} アクションにいます。
これは次のように出力されます: デフォルト コントローラのインデックス アクションにいます。
以下を確認するためにも使用できます。
{% if getControllerName() == 'default' %}
Whatever
{% else %}
Blablabla
{% endif %}