programing

TWIG 템플릿에서 세션 액세스

starjava 2023. 8. 15. 09:41
반응형

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오브젝트는 사용자로부터 이 항목을 추상화하므로 세션 변수를 저장하는 것이 사용자에게 숨겨지므로 세션을 데이터베이스에 저장하는 것이 더 쉽습니다.

따라서 세션에서 속성을 설정하고 다음을 사용하여 twig 템플릿의 값을 검색합니다.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'] %}

잔가지 설정

$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') }}

이렇게 하는 가장 깨끗한 방법은 사용자 지정 TwigExtension을 생성하고 해당 TwigExtension을 재정의하는 것입니다.getGlobals()방법.사용하기 보다는$_SESSION심포니의 것을 사용하는 것도 더 좋습니다.Session클래스는 세션 시작/종료를 자동으로 처리하기 때문입니다.

/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';
    }
}

그런 다음 /app/config/services.yml에 추가합니다.

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

그런 다음 다음을 사용하여 모든 보기에서 세션에 액세스할 수 있습니다.

{{ session.my_variable }}

언급URL : https://stackoverflow.com/questions/8399389/accessing-session-from-twig-template

반응형