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


170

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

parameters:
    app.version: 0.1.0

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

답변:


406

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

파라미터 설정 :

parameters:
    app.version: 0.1.0

나뭇 가지 구성 :

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

나뭇 가지 템플릿 :

{{ version }}

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

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

좋은 대답입니다. 부록 : Symfony 3.1부터 변수를 인용해야합니다 : "% app.version %"
BigJ

@BigJ : 이전 버전에서도 작동하므로 따옴표를 포함하도록 업데이트되었습니다.
Ryall

2
이것은 분명히 받아 들여질만한 대답이어야합니다. 감사 !
Cyrille

191

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

twig:
    globals:
        version: "0.1.0"

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

{{ version }}

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


28
@Ryall과 같은 매개 변수로 설정하는 것이 좋습니다.
MrGlass

89

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

# 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 메소드의 항목 중 하나로 리턴해야합니다.


5
이것은 시스템에 대한 모든 지식을 함께 유지하기 때문에 최상의 솔루션처럼 보입니다.
Jānis Gruzis

19

최신 버전의 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의 변수이기 때문에 개인적으로을 추가하는 것을 좋아하지 않으며 앞으로 무엇을 저장할 것인지 모르겠습니다.


16

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

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 }}

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


1
예,이 답변은 컨트롤러를 통해 전달하고 전역 나뭇 가지 변수로 전달하는 두 가지 방법을 잘 설명합니다! +1
Gottlieb Notschnabel

12

나뭇 가지 확장을 사용하면 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 }

덕분에 매개 변수 파일에서 나뭇 가지 전역으로 매개 변수를 복제해야한다고 걱정했습니다.
Joe Yahchouchi

좋지만 하나의 매개 변수에 대해 전체 컨테이너를 확장 할 때 불필요한 과부하 풀이 아닌 것은 아닙니다.
Lajdák Marek

Symfony 2에서는 컨테이너 매개 변수를 주입 할 수 없습니다 (현재 Symfony 4/5에서 가능)
Thomas Decaux

1

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


-3

confing.yml에서

# app/config/config.yml
twig:
  globals:
    version: '%app.version%'

나뭇 가지에서

# twig view
{{ version }}

2
전체 서비스 컨테이너에 대한 액세스 권한을 부여하는 것은 좋은 생각이 아닙니다. 컨테이너는 서비스 로케이터이며 그것은 심지어 어느 나뭇에서 의존성 주입 주입되지 않아야
폴 ANDRIEUX
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.