Tôi đã tìm kiếm rất nhiều trên mạng cách truy cập mảng toàn cầu $_SESSION
từ mẫu TWIG và tìm thấy điều này: {{app.session.get('index')}}
, nhưng khi tôi gọi nó, nó trả về một chuỗi rỗng. Tôi có số $_SESSION['filter']['accounts']
và tôi gặp phải lỗi này khi gọi {{app.session.get('filter').accounts}}
: Item "accounts" for "" does not exist
. Tôi đang làm gì sai?Truy cập phiên từ mẫu TWIG
Trả lời
{{app.session}}
đề cập đến đối tượng Session
chứ không phải là mảng $_SESSION
. Tôi không nghĩ rằng mảng $_SESSION
có thể truy cập trừ khi bạn chuyển nó một cách rõ ràng đến mọi mẫu Twig hoặc nếu bạn thực hiện một tiện ích mở rộng làm cho nó khả dụng.
Symfony2 là hướng đối tượng, vì vậy bạn nên sử dụng đối tượng Session
để đặt thuộc tính phiên và không dựa vào mảng. Đối tượng Session
sẽ trừu tượng hóa công cụ này khỏi bạn, vì vậy, việc lưu trữ phiên trong cơ sở dữ liệu dễ dàng hơn vì lưu trữ biến phiên bị ẩn khỏi bạn.
Vì vậy, hãy đặt thuộc tính của bạn trong phiên và truy lục giá trị trong mẫu cành của bạn bằng cách sử dụng đối tượng 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'] %}
Hy vọng điều này sẽ hữu ích.
Kính trọng,
Matt
cảm ơn :) điều này đã giúp tôi P.S. bạn cần thay đổi câu trả lời của bạn như sau: '$ session-> set ('filter', array ('accounts' => 'value'));' – haynar
Điều gì sẽ xảy ra nếu các phiên được lưu trong Memcached? – Sekai
@Sekai không làm cho một differnce tôi sẽ nói nếu bạn cấu hình nó một cách chính xác – Gigala
Một thủ thuật đơn giản là xác định các mảng $ _SESSION như là một biến toàn cầu. Cho rằng, chỉnh sửa file core.php trong thư mục mở rộng bằng cách thêm chức năng này:
public function getGlobals() {
return array(
'session' => $_SESSION,
) ;
}
Sau đó, bạn sẽ có thể acces bất kỳ biến phiên như:
{{ session.username }}
nếu bạn muốn truy cập vào
$_SESSION['username']
Đây là một câu trả lời tốt hơn nhiều so với ở trên, cho rằng bạn có thể sử dụng Twig mà không cần sử dụng Symfony. – gazarsgo
Thay vì chỉnh sửa core.php mặc dù theo các tài liệu ở đây: http://twig.sensiolabs.org/doc/advanced.html – gazarsgo
@gazarsgo Cả hai giải pháp đều tuyệt vời. – pregmatch
Tại sao bạn không sử dụng {{app.object name.field name}} để truy cập biến?
Tôi thấy rằng cách sạch nhất để làm điều này là tạo TwigExtension tùy chỉnh và ghi đè phương thức getGlobals()
của nó. Thay vì sử dụng $_SESSION
, bạn cũng nên sử dụng lớp Session
của Symfony vì nó xử lý tự động bắt đầu/dừng phiên.
Tôi đã có phần mở rộng sau trong /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';
}
}
Sau đó thêm này trong /app/config/dịch vụ.yml:
services:
app.twig_extension:
class: AppBundle\Twig\AppExtension
public: false
tags:
- { name: twig.extension }
Sau đó, phiên giao dịch có thể được truy cập từ bất kỳ quan điểm sử dụng:
{{ session.my_variable }}
Thx cho giải pháp tuyệt vời này – Elium1984
Điều này là tốt đẹp. Làm thế nào tôi có thể thiết lập một biến phiên trong cành bằng cách sử dụng giải pháp này ?? – Ranhot
@Ranhot, bạn không nên đặt biến phiên trong chế độ xem twig. Điều đó nên được thực hiện trong bộ điều khiển hoặc dịch vụ. –
Cài đặt cành
$twig = new Twig_Environment(...);
$twig->addGlobal('session', $_SESSION);
Sau đó trong mẫu giá trị phiên truy cập của bạn ví dụ
$_SESSION['username'] in php file Will be equivalent to {{ session.username }} in your twig template
Cách truy cập biến phiên trong Twig là:
{{ app.session.get('name_variable') }}
- 1. Truy cập các biến mẫu của twig từ php
- 2. Truy cập phiên trong Mẫu
- 3. Biến phiên truy cập từ HTTPModule
- 4. Làm mẫu từ tiện ích mở rộng twig
- 5. Làm cách nào để truy cập biến mẫu trong macro TWIG?
- 6. PHP & Twig: Rắc rối truy cập vào các biến trong mẫu
- 7. truy cập mô hình từ mẫu
- 8. Làm thế nào để truy cập một đối tượng cơ bản từ một FormView của Twig trong một mẫu?
- 9. Truy cập các giá trị mảng bằng cách sử dụng phím mảng từ Twig
- 10. Mẫu Twig trong Laravel 4
- 11. Twig- Bao gồm mẫu từ thư mục khác
- 12. Truy cập vào phiên từ một spec helper trong rspec
- 13. Truy cập Phiên bản từ AssemblyInfo trong MSBuild
- 14. Cách truy cập phiên từ một lớp Java
- 15. Truy cập phiên cakephp (auth) từ bên ngoài cakephp
- 16. Cách truy cập phiên từ Kiểm tra tích hợp Rails?
- 17. Tomcat: cách truy cập (phiên) Người quản lý từ servlet
- 18. Phiên truy cập trong dịch vụ WCF từ WebHttpBinding
- 19. Truy cập vào mẫu Django {{Variable}} từ JavaScript
- 20. cách truy cập phần tử từ điển trong mẫu django?
- 21. Cách truy cập biến mẫu từ "tên chuỗi" của nó?
- 22. symfony2: cách truy cập dịch vụ từ mẫu
- 23. Templating with Twig - truy cập vĩnh viễn vào một biến trong tất cả các mẫu của tôi
- 24. Kiểm tra đơn vị mẫu Twig
- 25. Twig - Năng động, Mẫu Bao gồm
- 26. ASP.NET: Truy cập phiên biến trong global.asax
- 27. Cách truy cập Phiên trong tệp .ashx?
- 28. Mẫu khách truy cập cho các phiên bản const và nonconst của cây
- 29. Thay thế cho mẫu khách truy cập?
- 30. Truy cập vào biến JavaScript từ PHP
KHÔNG sử dụng $ _SESSION trong Symfony! – Gigala