2017-12-28 3 views
0

Ich habe einen String von meinem DB geladen, und globale Variable von meinem config.yml. Ich möchte überprüfen, ob die Variable ein Teil von Array unten ist:Überprüfen, ob ein Wert im Array existiert TWIG

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

ich nicht ändern kann. Es muss so aussehen.

Ich war es so Überprüfung: {% if VARIABLE in app.user.role %}

Globale VARIABLE eine ganze Zahl (und ich kann es nicht ändern, dass)

Aber wenn zum Beispiel VARIABLE = 1 meine Anweisung gibt wahr, denn in app.user.role können wir vier 1 (in "1","10","11") finden, aber ich möchte es nur in "1" nicht in "10","11" finden.

Was ich will, ist app.user.role in Array konvertieren oder einen anderen Weg zu finden, um zu überprüfen, ob die Variable ein Element meiner Pseudo-Array ist.

ich versuchte, durch for Schleife zu durchlaufen, aber app.user.roleapp.user.role aber kein Array (actualy ist, aber mit einem Wert ["1","2","3","4","5","6","7","8","9","10","11"]).

+0

Ihr app.user.role kein Array ist, ist es ein String ist. Deshalb funktioniert ein einfaches 'if ... in' nicht. – Maerlyn

Antwort

1

Der String sieht aus wie JSON. Sie können einen Zweig Verlängerungs-Klasse erstellen und registrieren dort eine Funktion, die einfach in_array zurückgibt:

<?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)); 
    } 
} 

Dann in der Vorlage:

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

Eine Lösung gefunden. Nicht das Beste, aber es funktioniert.

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

Jetzt funktioniert es ...

+0

Warum erstellen Sie keinen Helfer, der Ihre String-Rollen in einem Array transformiert, dann verwenden Sie die klassische if var in varArray? –

+0

Ich habe es gerade getan, 'app.user.role' wird direkt aus der Sitzung geladen, jetzt transformiere ich das in ein Array und es funktioniert wie erwartet –

Verwandte Themen