developer tip

TWIG 템플릿에서 세션에 액세스

optionbox 2021. 1. 9. 09:44
반응형

TWIG 템플릿에서 세션에 액세스


$_SESSIONTWIG 템플릿에서 전역 배열 에 액세스하는 방법을 인터넷에서 많이 검색 한 결과 다음을 찾았습니다. {{app.session.get('index')}}하지만 호출 할 때 빈 문자열을 반환합니다. 나는 $_SESSION['filter']['accounts']있고 호출 할 때이 오류가 발생합니다 {{app.session.get('filter').accounts}}: Item "accounts" for "" does not exist. 내가 뭘 잘못하고 있니?


{{app.session}}배열이 Session아닌 객체를 참조합니다 $_SESSION. $_SESSION모든 Twig 템플릿에 명시 적으로 전달하거나 사용할 수 있도록 확장을 수행하지 않는 한 배열에 액세스 할 수 없다고 생각합니다 .

Symfony2는 객체 지향적이므로 Session객체를 사용하여 세션 속성을 설정하고 배열에 의존하지 않아야합니다. Session객체는이 물건을 멀리에서 세션 변수가 당신에게서 숨겨져 저장 있기 때문에, 말, 데이터베이스에 세션을 저장하는 것이 더 쉽습니다 그래서 추상적 인 것입니다.

따라서 세션에서 속성을 설정하고 Session개체 를 사용하여 나뭇 가지 템플릿에서 값을 검색 합니다.

// In a controller
$session = $this->get('session');
$session->set('filter', array(
    'accounts' => 'value',
));

// In Twig
{% set filter = app.session.get('filter') %}
{% set account-filter = filter['accounts'] %}

도움이 되었기를 바랍니다.

감사합니다,
Matt


나뭇 가지 설정

$twig = new Twig_Environment(...);    
$twig->addGlobal('session', $_SESSION);

그런 다음 예를 들어 템플릿 액세스 세션 값 내에서

$_SESSION['username'] in php file Will be equivalent to {{ session.username }} in your twig template

간단한 트릭은 $ _SESSION 배열을 전역 변수로 정의하는 것입니다. 이를 위해 다음 함수를 추가하여 확장 폴더의 core.php 파일을 편집하십시오.

public function getGlobals() {
    return array(
        'session'   => $_SESSION,
    ) ;
}

그러면 다음과 같이 모든 세션 변수에 액세스 할 수 있습니다.

{{ session.username }}

에 액세스하려면

$_SESSION['username']

Twig에서 세션 변수에 액세스하는 방법은 다음과 같습니다.

{{ app.session.get('name_variable') }}

I found that the cleanest way to do this is to create a custom TwigExtension and override its getGlobals() method. Rather than using $_SESSION, it's also better to use Symfony's Session class since it handles automatically starting/stopping the session.

I've got the following extension in /src/AppBundle/Twig/AppExtension.php:

<?php    
namespace AppBundle\Twig;

use Symfony\Component\HttpFoundation\Session\Session;

class AppExtension extends \Twig_Extension {

    public function getGlobals() {
        $session = new Session();
        return array(
            'session' => $session->all(),
        );
    }

    public function getName() {
        return 'app_extension';
    }
}

Then add this in /app/config/services.yml:

services:
    app.twig_extension:
        class: AppBundle\Twig\AppExtension
        public: false
        tags:
            - { name: twig.extension }

Then the session can be accessed from any view using:

{{ session.my_variable }}

Why don't you use {{ app.object name.field name}} to access the variable?

ReferenceURL : https://stackoverflow.com/questions/8399389/accessing-session-from-twig-template

반응형