2016-08-18 79 views
1

我試圖從一個數組中的一個目錄中獲取所有圖像,然後對其進行洗牌,然後在Symfony的視圖中顯示它。Symfony:隨機數組

例如:

/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