私のコードでは、Symfony Twig Bridge を使用して Twig と統合したい Twig および Symfony ルーティングを使用しています。
私は両方をインストールしており、Symfony\Component\Routing\Generator\UrlGenerator を必要とする Twig 拡張機能 Symfony\Bridge\Twig\Extension\RoutingExtension に追加する必要があります。
UrlGenerator には 2 つの引数が必要です。
- ルート コレクション
- リクエストコンテキスト
したがって、私のyamlサービスファイルには次のものがあります。
router:
class: Symfony\Component\Routing\Router
arguments:
- '@yaml.file.loader'
- '%routing.file%'
- { 'cache_dir' : '%cache.dir%' }
- '@request.context'
twig:
class: Twig_Environment
calls:
- ['addExtension', ['@twig.extensions.debug']]
- ['addExtension', ['@twig.extensions.translate']]
- ['addExtension', ['@twig.extensions.routing']]
arguments:
- '@twig.loader'
- '%twig.options%'
twig.extensions.routing:
class: Symfony\Bridge\Twig\Extension\RoutingExtension
public: false
arguments:
- '@twig.url.generator'
そして最後に UrlGenerator:
twig.url.generator:
class: Symfony\Component\Routing\Generator\UrlGenerator
public: false
arguments:
- '@router'
- '@request.context'
残念ながら、@router はルート コレクション タイプではありません。UrlGenerator に必要なデータを取得できるメソッド getRouteCollection があり、拡張機能を手動で追加すると機能します。コントローラーから。しかし、私は異なるファイル間でサービス定義を分割したくなく、それらを yaml サービス定義に保持することを好みます。
問題は、生のオブジェクト Router ではなく、getRouteCollection の結果である UrlGenerator に引数として渡す方法です。