2016-08-18 5 views
1

Я пытаюсь получить все изображения из каталога в массиве, а затем перетасовать его, а затем показать его в представлении в Symfony.Symfony: Shuffle array

Например:

/images/theme/404/01.gif

/images/theme/404/02.gif

/изображения/тема/404/03. gif

- это изображения, но я не знаю, сколько изображений есть. Я пытаюсь перетасовать эти изображения, чтобы показать их после.

Я сделал это:

Контроллер

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

Посмотреть

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

Я получаю эту ошибку: ошибка Warning: Cannot use a scalar value as an array

ED IT

С этим контроллером у меня больше нет ошибки.

Контроллер

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

Но у меня есть еще одна проблема, я не могу видеть изображения на странице. Когда я проверяю HTML, divs <div class="clearfix mosaicflow"> даже не здесь.

+0

сделать 'дамп ($ errorFilesShuffled); 'перед тем, как вы отформатируете форму и опубликуете результат. Кроме того, вы перетасовываете массив до того, как будет установлен какой-либо элемент, поэтому это ничего не сделает. – KhorneHoly

+0

Я написал ответ, который должен решить вашу проблему. – KhorneHoly

ответ

2

Если вы посмотрите на определение функции shuffle(), вы заметите, что массив будет указан для каждой ссылки, и функция вернет логическое значение.

Так

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

Будет ли действительно эхо УРА

Для того, чтобы ваш код работает, то вы должны изменить его к этому:

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

Отлично: D Спасибо! – Pierrou

+0

@Pierrou не проблема, но имейте в виду, что просмотр официальной документации может защитить день ;-) – KhorneHoly