2017-12-04 7 views
0

MainBundle/MainFunctions /にサービスを定義しましたが、コントローラでサービスを呼び出すことができます。今すぐテンプレートのSYMFONY 3.4でサービスコンテナを入手できますか?もはや公開されていないドキュメントを読んでください。テンプレート内のsymfony3.4サービスコンテナ

#view/template.html.php 
<?php $shop_id = $this->container->get('main_functions')->getSessionShopId(); ?> 

マイconfig.yml

imports: 
- { resource: parameters.yml } 
- { resource: security.yml } 
- { resource: services.yml } 
- { resource: "@FrontendMainBundle/Resources/config/services.yml 

私FrontendMainBundle /リソース/設定/ services.yml

services: 
    _defaults: 
     public: true 
    frontend_locale.locale_listener: 
     class: Frontend\MainBundle\EventListener\LocaleListener 
     arguments: ["%kernel.default_locale%"] 
     tags: 
      - { name: kernel.event_subscriber } 
    main_functions: 
     public: true 
     class: "%main_functions_class.class%" 
     arguments: ['@translator', '@doctrine.orm.entity_manager'.... 

私はそれはもう公開されていないというドキュメントをお読みください。しかし、私はテンプレートのmain_functionsに行くことができません。どうやって?

THANKS !!!あなたのテンプレートでいくつかの知能を必要とする場合

+0

サービスロケータをテンプレートに使用することは、私の意見では悪い習慣です。代わりに、コントローラに 'main_functions'サービスを注入し、必要なvarsだけをテンプレートに渡してください。 – yceruto

答えて

0

MatteMouthの回答は、枝のテンプレートからサービスにアクセスする最も良い方法です。テンプレートでアクセスする必要のある各メソッドの関数を作成することができます。あなたのオブジェクトをtwig変数として追加しようとするのは、たとえばDoctrineエンティティのような基本的なゲッターでない限り、良い習慣ではありません。

ここでは、新たな機能を設定すると、コンテナサービスでそれを登録するにいくつかの素晴らしいドキュメントがある:あなたはまた、代わりに、関数のフィルタを登録することができます

https://symfony.com/doc/3.2/templating/twig_extension.html

。両者の違いは、関数構文someFunction(someVar)とフィルタsomeVar|someFilterです。関数やフィルターに引数を追加する必要がある場合は、引数を呼び出し可能関数に追加してください。

ここ小枝からいくつかのドキュメントです:

https://twig.symfony.com/doc/2.x/advanced.html

は、あなたがそれHTML安全など、小枝環境を注入...

幸運とコーディング幸せのようなクールなものを行うことができます!

関連する問題