2016-08-18 4 views
1

Ich versuche, alle Bilder aus einem Verzeichnis in einem Array zu haben, dann mischen und dann in der Ansicht in Symfony anzeigen.Symfony: Shuffle ein Array

Zum Beispiel:

/images/theme/404/01.gif

/images/theme/404/02.gif

/images/Thema/404/03. gif

sind die Bilder, aber ich weiß nicht, wie viele Bilder es gibt. Ich versuche, diese Bilder zu mischen, um sie danach zu zeigen.

Ich tat dies:

-Controller

public function showAction() 
{ 
    $dir = $this->get('kernel')->getRootDir() . '/../web/images/theme/404/'; 
    $dh = opendir($dir); 
    $errorFiles = array(); 
    $errorFilesShuffled = shuffle($errorFiles); 
    while (false !== ($filename = readdir($dh))) 
     if ($filename != '.' && $filename != '..' && $filename[0] != '.') 
      $errorFilesShuffled[] = $filename; 

    return $this->render('errors/show.html.twig', [ 
       'gifs' => $errorFilesShuffled 
    ]); 
} 

Ansicht

{% for image in gifs %} 
    <div class="clearfix mosaicflow"> 
     <div class="mosaicflow__item"> 
      <img src="{{ asset('/images/theme/404/'~image) }}" /> 
     </div> 
    </div> 
{% endfor %} 

ich diesen Fehler Fehler: Warning: Cannot use a scalar value as an array

ED IT

Mit diesem Controller habe ich den Fehler nicht mehr.

-Controller

public function showAction() 
{ 
    $dir = $this->get('kernel')->getRootDir() . '/../web/images/theme/404/'; 
    $dh = opendir($dir); 
    $errorFiles = array(); 
    while (false !== ($filename = readdir($dh))) 
     if ($filename != '.' && $filename != '..' && $filename[0] != '.') 
      $errorFiles[] = $filename; 

    $errorFilesShuffled = shuffle($errorFiles); 

    return $this->render('errors/show.html.twig', [ 
     'gifs' => $errorFilesShuffled 
    ]); 
} 

Aber ich ein anderes Problem haben, kann ich sehen, die Bilder auf der Seite nicht. Wenn ich den HTML-Code überprüfe, sind die divs <div class="clearfix mosaicflow"> nicht einmal hier.

+0

tun, um eine 'dump ($ errorFilesShuffled); 'Bevor Sie das Formular rendern und das Ergebnis veröffentlichen. Außerdem mischen Sie das Array, bevor Elementelemente gesetzt sind, was nichts bringt. – KhorneHoly

+0

Ich habe eine Antwort geschrieben, die Ihr Problem lösen sollte. – KhorneHoly

Antwort

2

Wenn Sie sich die Definition der Funktion shuffle() ansehen, werden Sie feststellen, dass das Array pro Referenz angegeben wird und die Funktion einen booleschen Wert zurückgibt.

So

$errorFilesShuffled = shuffle($errorFiles); 
if ($errorFilesShuffled === true) 
    echo "HURRAY"; 

wäre in der Tat Echo HURRAY

Um Ihren Code arbeiten Sie es so ändern müssen zu machen:

shuffle($errorFiles); // The array will be given per reference 
return $this->render('errors/show.html.twig', [ 
    'gifs' => $errorFiles 
]); 
+0

Perfekt: D Danke! – Pierrou

+0

@Pierrou kein Problem, aber bedenken Sie, dass ein Blick in die offizielle Dokumentation den Tag retten kann ;-) – KhorneHoly