2013-05-06 9 views
11

Làm cách nào để hiển thị giá trị của giá trị của khóa mảng khi có dấu gạch ngang trong tên?Twig hiển thị phím mảng với dấu gạch ngang trong đó

Tôi có đoạn này:

$snippet = " 
    {{ one }} 
    {{ four['five-six'] }} 
    {{ ['two-three'] }} 
"; 

$data = [ 
    'one' => 1, 
    'two-three' => '2-3', 
    'four' => [ 
     'five-six' => '5-6', 
    ], 
]; 

$twig = new \Twig_Environment(new \Twig_Loader_String()); 
echo $twig->render($snippet, $data); 

Đầu ra là

1 
5-6 
Notice: Array to string conversion in path/twig/twig/lib/Twig/Environment.php(320) : eval()'d code on line 34 

Và nó ám four['five-six'] tốt. Nhưng ném một lỗi trên ['two-three'].

+0

Thats vì 'hai three' đang được sử dụng như một biểu tượng địa phương .. nó giống như cố gắng sử dụng '$ hai three' trong nguyên PHP. NẾU bạn đang sử dụng Twig như trong ví dụ của bạn thì bạn nên vượt qua mảng như là thành viên của mảng khác với tên biến là khóa như '$ data = array ('values' => $ theOtherArray); ' – prodigitalson

Trả lời

18

Điều này không thể làm việc, vì bạn không nên sử dụng toán tử gốc trong tên biến - Twig nội bộ biên dịch sang PHP để nó không thể xử lý này.

Đối với các thuộc tính (phương pháp hoặc thuộc tính của một đối tượng PHP, hoặc các mục của một mảng PHP) có một cách giải quyết, from the documentation:

Khi thuộc tính chứa các ký tự đặc biệt (như - mà sẽ được hiểu là biện pháp trừ điều hành), sử dụng chức năng thuộc tính thay vì để truy cập thuộc tính biến:

{# equivalent to the non-working foo.data-foo #} 
{{ attribute(foo, 'data-foo') }} 
+0

Tôi đoán bạn có thể sử dụng '{{thuộc tính (_context, 'data-foo')}}' cho mảng không đa chiều @ twig 2.x. – norixxx

5

Trên thực tế điều này có thể làm việc, và nó hoạt động:

 $data = [ 
      "list" => [ 
       "one" => [ 
        "title" => "Hello world" 
       ], 
       "one-two" => [ 
        "title" => "Hello world 2" 
       ], 
       "one-three" => [ 
        "title" => "Hello world 3" 
       ] 
      ] 
     ]; 
     $theme = new Twig_Loader_Filesystem("path_to_your_theme_directory"); 
     $twig = new Twig_Environment($theme, array("debug" => true)); 
     $index = "index.tmpl"; // your index template file 
     echo $this->twig->render($index, $data); 

Và đoạn sử dụng bên trong template file:

{{ list["one-two"]}} - Returns: Array 
{{ list["one-two"].title }} - Returns: "Hello world 2" 
+0

Đây là một trường hợp khác, được lồng trong một đối tượng. Nó không trả lời câu hỏi ban đầu mà vẫn yêu cầu giải pháp. –