2013-02-27 45 views
8

Tôi không thể truy cập biến mẫu trong macro TWIG.Làm cách nào để truy cập biến mẫu trong macro TWIG?

Đây là một ví dụ đơn giản:

{% set myname = "Ligio" %} 
{{ _self.pagedurl(1) }} 

{% macro pagedurl(page) %} 
    Hi {{ _self.myname }}! This is Page Num {{ page }} 
{% endmacro %} 

Làm thế nào tôi có thể truy cập các biến myname mà không đi qua nó để vĩ mô?

+0

Bạn đã thử đơn giản '{{myname}}' chưa? – Maerlyn

+1

với {{myname}} Tôi không nằm trong phạm vi của biến ... Nó không hoạt động! – Ligio

Trả lời

16

Bạn không thể.

Như đã nêu trong tài liệu hướng dẫn:

Như chức năng PHP, macro không có quyền truy cập vào các mẫu hiện tại biến.

giải pháp duy nhất của bạn là phải vượt qua các tham số cho macro:

{% import _self as flow %} 
{{ flow.pagedurl(1, "Ligio") }} 

{% macro pagedurl(page, myname) %} 
    Hi {{ myname }}! This is Page Num {{ page }} 
{% endmacro %} 

QUAN TRỌNG LƯU Ý:

Bạn có thể nhận thấy trong ví dụ của tôi, tôi gọi {% import _self as flow %}.
Đây là một cái gì đó bạn PHẢI làm:

Khi bạn định nghĩa một macro trong các mẫu mà bạn sẽ sử dụng nó, bạn có thể bị cám dỗ để gọi trực tiếp thông qua vĩ mô _self.input() thay vì nhập nó; ngay cả khi có vẻ hiệu quả, đây chỉ là tác dụng phụ của của việc triển khai hiện tại và nó sẽ không hoạt động nữa trong Twig 2.x.

http://twig.sensiolabs.org/doc/tags/macro.html

+1

Một giải pháp có thể "hack" các "globals" của bạn là xây dựng một var var (hoặc sử dụng _context) như một mảng các biến quan trọng của bạn và sau đó vượt qua cành này var làm đối số cuối cùng cho bất kỳ macro nào bạn sử dụng. --------- Khi nằm trong phạm vi macro của bạn, bạn có thể truy cập đối số cuối cùng này thông qua thuộc tính varargs. ví dụ: {% đặt MyGlobals = varargs [0]%} –

5

Nếu bạn cần phải vượt qua nhiều hơn một biến toàn cầu vào macro, bạn có thể tìm thấy những _context biến hữu ích:

{% macro mymacro(globalvars) %} 
    Value of the global variable pi is {{ globalvars.pi }} 
{% endmacro %} 

{% set pi = 3.14159 %} 
{{ _self.mymacro(_context) }} 

Ref: this hoặc this câu trả lời.

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