[symfony] Symfony2 Twig 템플리트에서 구성 매개 변수를 얻는 방법

Symfony2 Twig 템플릿이 있습니다. 이 나뭇 가지 템플릿 (버전 번호)에서 구성 매개 변수의 값을 출력하고 싶습니다. 따라서 다음과 같이 구성 매개 변수를 정의했습니다.

parameters:
    app.version: 0.1.0

컨트롤러 에서이 구성 매개 변수를 사용할 수는 있지만 Twig 템플릿에서 구성 매개 변수를 얻는 방법에 대한 실마리는 없습니다.



답변

구성 의 twig globals 섹션 에서 매개 변수 대체를 사용할 수 있습니다 .

파라미터 설정 :

parameters:
    app.version: 0.1.0

나뭇 가지 구성 :

twig:
    globals:
        version: '%app.version%'

나뭇 가지 템플릿 :

{{ version }}

이 메소드는 다음을 사용하여 ContainerAware클래스에서도 매개 변수를 사용할 수있는 이점을 제공합니다 .

$container->getParameter('app.version');


답변

구성 파일에서 쉽게 정의 할 수 있습니다.

twig:
    globals:
        version: "0.1.0"

템플릿을 사용하여 액세스하십시오.

{{ version }}

그렇지 않으면 매개 변수를 표시하기 위해 Twig 확장을 사용해야합니다.


답변

내장 된 서비스 매개 변수 시스템을 활용하여 값을 분리하거나 재사용 할 수 있습니다.

# app/config/parameters.yml
parameters:
    ga_tracking: UA-xxxxx-x

# app/config/config.yml
twig:
    globals:
        ga_tracking: "%ga_tracking%"

이제 ga_tracking 변수 는 모든 Twig 템플릿에서 사용할 수 있습니다.

<p>The google tracking code is: {{ ga_tracking }}</p>

이 파라미터는 컨트롤러 내부에서도 사용할 수 있습니다.

$this->container->getParameter('ga_tracking');

서비스를 전역 나뭇 가지 변수 (Symfony2.2 +)로 정의 할 수도 있습니다.

# app/config/config.yml
twig:
    # ...
    globals:
        user_management: "@acme_user.user_management"

http://symfony.com/doc/current/templating/global_variables.html

설정하려는 전역 변수가 더 복잡하면 (예 : 객체) 위의 방법을 사용할 수 없습니다. 대신, Twig Extension작성 하고 전역 변수를 getGlobals 메소드의 항목 중 하나로 리턴해야합니다.


답변

최신 버전의 Symfony2 ( parameters.yml대신parameters.ini )에서 키-값 쌍 대신 객체 또는 배열을 저장할 수 있으므로 다음과 같이 전역을 관리 할 수 ​​있습니다.

config.yml (한 번만 편집) :

# app/config/config.yml
twig:
  globals:
    project: %project%

parameters.yml :

# app/config/parameters.yml
project:
  name:       myproject.com
  version:    1.1.42

그런 다음 나뭇 가지 파일에서 {{ project.version }}또는{{ project.name }} .

참고 : 나는 appSymfony의 변수이기 때문에 개인적으로을 추가하는 것을 좋아하지 않으며 앞으로 무엇을 저장할 것인지 모르겠습니다.


답변

위의 주어진 대답은 정확하고 잘 작동합니다. 나는 다른 방식으로 사용했다.

config.yml

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: app.yml }
    - { resource: app_twig.yml }

app.yml

parameters:
  app.version:           1.0.1

app_twig.yml

twig:
  globals:
    version: %app.version%

내부 컨트롤러 :

$application_version = $this->container->getParameter('app.version');
// Here using app.yml

내부 템플릿 / 단일 파일 :

Project version {{ version }}!
{#  Here using app_twig.yml content.  #}
{#  Because in controller we used $application_version  #}

컨트롤러 출력을 사용하려면

제어 장치:

public function indexAction() {
        $application_version = $this->container->getParameter('app.version');
        return array('app_version' => $application_version);
    }

템플릿 / Twig 파일 :

Project version {{ app_version }}

나는 더 나은 이해를 위해 다른 것을 언급했다.


답변

나뭇 가지 확장을 사용하면 parameter나뭇 가지 기능을 만들 수 있습니다 .

{{ parameter('jira_host') }}

TwigExtension.php :

class TwigExtension extends \Twig_Extension
{
    public $container;

    public function getFunctions()
    {
        return [
            new \Twig_SimpleFunction('parameter', function($name)
            {
                return $this->container->getParameter($name);
            })
        ];
    }


    /**
     * Returns the name of the extension.
     *
     * @return string The extension name
     */
    public function getName()
    {
        return 'iz';
    }
}

service.yml :

  iz.twig.extension:
    class: IzBundle\Services\TwigExtension
    properties:
      container: "@service_container"
    tags:
      - { name: twig.extension }


답변

$this->getParameter('app.version')컨트롤러에 바인딩 하여 나뭇 가지 매개 변수를 묶은 다음 렌더링 할 수 있습니다.