TWIG 템플릿에서 세션에 액세스
$_SESSION
TWIG 템플릿에서 전역 배열 에 액세스하는 방법을 인터넷에서 많이 검색 한 결과 다음을 찾았습니다. {{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
'developer tip' 카테고리의 다른 글
유형 목록은 일반적이지 않습니다. (0) | 2021.01.09 |
---|---|
onRequestPermissionsResult가 대화 조각에서 호출되지 않습니다. (0) | 2021.01.09 |
Swift 내에서 프로그래밍 방식으로 탭 간 전환 (0) | 2021.01.09 |
WordPress 사이트에서 bitnami 배너를 제거하려면 어떻게해야합니까? (0) | 2021.01.09 |
어레이를 빠르게 제로화하는 방법은 무엇입니까? (0) | 2021.01.09 |