2016-08-18 3 views
1

私は配列のディレクトリからすべてのイメージを取り出し、シャッフルして、それをSymfonyのビューに表示しようとしています。例えばSymfony:配列をシャッフルする

/画像/テーマ/ 404/03 /images/theme/404/02.gif

/images/theme/404/01.gif

。 gif

は画像ですが、画像の数はわかりません。私はそれらのイメージをシャッフルして、それを見せつけようとします。

私はこれでした:Warning: Cannot use a scalar value as an array

ED:私は、このエラーのエラーを取得

コントローラ

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 %} 

を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をチェックすると、div <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

関連する問題