2017-12-28 44 views
0

내 DB에서로드 된 문자열이 있고 전역 변수가 config.yml입니다. 나는 그것을 변경할 수 없습니다값이 배열 TWIG에 있는지 확인하십시오.

app.user.role ='["1","2","3","4","5","6","7","8","9","10","11"]' 

: 나는 변수가 아래에 주어진 배열의 일부가 있는지 확인하고 싶습니다. 이렇게 보일 것입니다.

나는 이런 식으로 확인되었다 {% if VARIABLE in app.user.role %}

글로벌 VARIABLE는 정수 (나는 변경할 수 없습니다)

그러나 예를 VARIABLE = 1 내 문에 있기 때문에, true를 돌려주는 경우 app.user.role1 ("1","10","11") 네 개를 찾을 수 있지만 "1"이 아닌 "10","11"에 있습니다.

원하는 것은 app.user.role을 배열로 변환하거나 변수가 내 의사 배열의 요소인지 확인하는 다른 방법을 찾는 것입니다.

I는 루프 for하지만 app.user.roleapp.user.role하지만 반복려고 배열되지 않은 경우 (actualy가 있지만 하나 개의 값으로 ["1","2","3","4","5","6","7","8","9","10","11"]).

+0

귀하의 app.user.role가 배열이 아닌, 그것은 문자열입니다. 그래서 간단한 'if ... in'이 작동하지 않는 이유입니다. – Maerlyn

답변

1

문자열은 JSON처럼 보인다. 당신은 나뭇 가지 확장 클래스를 생성하고 거기에 단순히 in_array를 반환하는 기능을 등록 할 수 있습니다 : 템플릿에 그런

<?php 

class MyExtension extends Twig_Extension 
{ 
    public function getFunctions() 
    { 
     return [ 
      new Twig_SimpleFunction(
       'inarray', 
       [$this, 'inArray'] 
      ), 
     ]; 
    } 

    /** 
    * @param int $variable 
    * @param string $appUserRole 
    * 
    * @return bool 
    */ 
    public function inArray(int $variable, string $appUserRole): bool 
    { 
     return in_array($variable, json_decode($appUserRole)); 
    } 
} 

을 :

{% if inarray(VARIABLE, app.user.role) %} 
0

해결책을 찾았습니다. 최고는 아니지만 작동합니다.

{% set check = '"'~VARIABLE~'"' %} 
{% if check in app.user.role %} 

지금은 일하고 ...

+0

배열에서 문자열 역할을 변환하는 도우미를 만든 다음 varArray에서 var if classic을 사용하는 이유는 무엇입니까? –

+0

방금 ​​해 봤는데,'app.user.role'이 세션에서 바로로드되었습니다. 이제 배열로 변환하고 예상대로 작동합니다. –