2013-12-18 3 views
0

나는 주위를 둘러 보았습니다. TWIG의 제작자는 실제로 내가보기에 순수한 직업 인 템플릿을 사용해야한다고 주장합니다. 전혀 돌 보지 않니?!TWIG에서 stdClass의 속성에 액세스 할 수 없습니다.

몇 가지 맞춤 TWIg 필터없이 stdClass 객체를 반복 할 수 없다는 것을 알고 있으므로 지금 해킹했습니다.하지만 동적으로 속성에 액세스 할 수없는 경우이 TWIG는 실제로 전혀 유용하지 않습니다. . 여기

$fixedModuleNames = array('time', 'date', 'weather'); //since TWIG doesn't iterate over objects by default, this is my solution, don't feel like adding a bunch of twigfilters just for this. 
    $fixedModules = json_decode($entity->getFixedModules()); 

    /* 
    Here's what fixedModules look like (although here not JSON but array, before encoded to json, I like to create my JSONs this way in PHP) 
    $fixedModules["time"] = array(
     'show'   => true, 
     'left'   => 10, 
     'top'   => 10, 
     'width'   => 100, 
     'height'  => 200, 
     'fontColor'  => '#000000', 
     'fontSize'  => 40, 
     'fontFamily' => 'Arial', 
     'borderColor' => '', 
     'borderRounding'=> 0, 
     'bgColor'  => '' 
    ); 
    */ 

내가 할 노력하고 있어요 ...
   {% for item in fixedModuleNames %} 
       <TR> 
        <TD><input type="number" id="left_{{ item }}" value="{{ fixedModules[item].left }}" class="LayoutModuleEditField" /></TD> 

그래서이 줄
{{ fixedModules[item].left }} 

매우 일상이다 내가 무엇을하고 있는가 때문에이 주위에 방법이 있어야합니다 실패 무엇 ?

+0

레코드의 경우 :'json_decode'의 두 번째 매개 변수로'true'를 전달하면'\ stdClass' 인스턴스 대신에 연관 배열이됩니다. – Maerlyn

+0

니스! 그럼에도 불구하고 각 섹션의 "이름"을 잃어 버리는 것 같습니다 (위의 예에서 "시간"). 그걸 보존 할 방법이 있을까요? –

답변

0

아, 아마도이 방법을 선호합니까?

{{ attribute(fixedModules, item).left }} 
0

속성 기능이 작동하면 사용하십시오.

fixedModules [item] .left를 고려하십시오. 나뭇 가지에 물건이 변수이고 왼쪽은 상수라는 것을 알아 내려고합니다. 어떤 시스템이든 말하기가 어렵습니다. 그냥 배열 반복자 인터페이스를 구현 한 후 객체를 반복 할 경우

{% for moduleName, module in fixedModules %} {# Time, Date, Weather module #} 
    {% for itemName,itemValue in module %} {# Process each attribute in the module #} 
     ... 

:

내가 좋아하는 뭔가를 사용할 수 있습니다. 보통 꽤 간단합니다.

+0

내가하고 싶은 일이 PHP의 연관 배열과 어떻게 다른가요? $ array [ "subName"] [ "property"] –

0

은 배열이 아닌 핵심 요소입니다. 이 도움이

{% for key, item in fixedModuleNames %} 
    left = {{ fixedModuleNames[key].left }} 
{% enfor %} 

희망 : 당신이 정말로, 대신 키를 사용하여 같은 일을하려면

{% for item in fixedModuleNames %} 
    left = {{ item.left }} 
{% enfor %} 

: 그래서 당신은이 방법으로 당신의 속성에 액세스 할 수 있습니다.

관련 문제