2016-08-18 80 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