2015-03-10 14 views
5

Có thể thiết lập các biến toàn cầu trong một tệp tin, để tôi có thể truy cập các biến đó từ các tệp, macro và khối khác.Làm thế nào tôi có thể xác định các biến toàn cầu bên trong một tệp mẫu khuôn mẫu?

Ví dụ: tôi muốn có tệp variables.twig và trong đó đặt biến của tôi và sau đó tôi có thể đưa nó vào các mẫu khác.

Tôi biết rằng việc đặt các biến chung có thể thực hiện được từ khung công tác (ví dụ: Symfony) nhưng tôi chỉ muốn một giải pháp sử dụng các tính năng ghép đôi.

+0

có thể trùng lặp của [Symfony 2 + Twig global variables] (http://stackoverflow.com/questions/9263903/symfony-2-twig-global-variables) – pbenard

Trả lời

15

Sử dụng cấu hình Symfony2

Nếu bạn đang sử dụng Symfony2, bạn có thể đặt globals trong tập tin config.yml của bạn:

# app/config/config.yml 
twig: 
    # ... 
    globals: 
     myStuff: %someParam% 

Và sau đó sử dụng {{ myStuff }} bất cứ nơi nào trong ứng dụng của bạn.


Sử dụng Twig_Environment :: addGlobal

Nếu bạn đang sử dụng cành trong một dự án khác, bạn có thể đặt globals của bạn trực tiếp trong môi trường:

$twig = new Twig_Environment($loader); 
$twig->addGlobal('myStuff', $someVariable); 

Và sau đó sử dụng {{ myStuff }} bất cứ nơi nào trong ứng dụng của bạn .


Sử dụng một phần mở rộng Twig

Nếu bạn có rất nhiều biến toàn cầu và muốn chỉ định một bộ globals cho một phần cụ thể của ứng dụng của bạn mà thôi, bạn có thể tạo một phần mở rộng Twig:

class Some_Twig_Extension extends Twig_Extension implements Twig_Extension_GlobalsInterface 
{ 
    public function getGlobals() 
    { 
     return array(
      'someStuff' => $this->myVar, 
      // ... 
     ); 
    } 

    // ... 
} 

Sau đó nhập nó trong môi trường của bạn chỉ khi cần thiết:

$twig = new Twig_Environment($loader); 
$twig->addExtension(new Project_Twig_Extension()); 

Và vẫn sử dụng {{ myStuff }} ở bất kỳ đâu trong ứng dụng của bạn.

Sử dụng một mẫu Twig

Khi bạn bao gồm một đoạn mã Twig, bạn chỉ bao gồm quan điểm render đến từ mã mà, không phải là mã riêng của mình. Vì vậy, đó là do thiết kế không thể bao gồm một tập hợp các biến theo cách bạn đang tìm kiếm.

+0

Câu trả lời rất tốt, kỹ lưỡng, cảm ơn bạn đã cung cấp các lựa chọn thay thế chỉ với giải pháp config.yml! @ alain-tiemblo –

+0

Chỉ cần lưu ý: Phương thức getGlobals() đã không còn được dùng nữa. –

+0

Phương pháp thứ hai đã giải quyết được vấn đề của tôi! Cảm ơn ! : D –

Các vấn đề liên quan