2017-12-04 17 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에 도달 할 수 없습니다. 방법?

고맙습니다. 당신이 당신의 템플릿에 약간의 지능을 필요로하는 경우

+0

서비스 로케이터를 템플릿에 사용하는 것은 제 의견으로는 좋지 않습니다. 대신 컨트롤러에'main_functions' 서비스를 삽입하고 템플릿에 필요한 vars 만 전달하십시오. – yceruto

답변

0

MatMouth의 답변은 나뭇 가지 템플릿의 서비스와 연결하는 가장 좋은 방법입니다. 템플리트에서 액세스해야하는 각 메소드에 대한 함수를 작성할 수 있습니다. 객체를 나뭇 가지 변수로 추가하려고 시도하는 것은 좋은 습관이 아닙니다. 예를 들어 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 안전하게 나뭇 가지 환경을 주입 같은 멋진 일을 할 수 있습니다!