2017-08-08 6 views
0

PHPのscanDirを使ってすべてのディレクトリを配列として取得しようとしていて、テンプレートの "for loop"というtwigを使っています。ここ twigでディレクトリlisingをロードする

は私のindex.php

require_once 'vendor/autoload.php'; 
$loader = new Twig_Loader_Filesystem('templates'); 
$twig = new Twig_Environment($loader, array(
    'cache' => 'cache', 
)); 

$dir = "movies"; 
$exclude = array(".","..",".*",".php"); 
$movies = array_diff(scandir($dir), $exclude); 

echo ''; print_r($movies); 

$template = $twig->loadTemplate('base.html.twig'); 
echo $template->render($movies); 

であり、ここで私の小枝のテンプレートである - 私のブラウザからソースコード出力base.html.twigここ

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Movies</title> 
</head> 
<body> 
    <h1>Movies</h1> 
    <ul> 
     {% for movie in movies %} 
      <li>{{ movie }}</li> 
     {% endfor %} 
    </ul> 
</body> 
</html> 

Array 
(
    [2] => A Movie From Twentytwelve (2012) 
    [3] => A Movie From Twentyfourteen (2014) 
    [4] => Another Movie From Twentyfourteen (2014) 
    [5] => index.php 
) 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Movies</title> 
</head> 
<body> 
    <h1>Movies</h1> 
    <ul> 
    </ul> 
</body> 
</html> 

が表示されているので、scandirが配列を取得しています(ただし、.phpファイルは除外しません)。また、テンプレートがロードされているのを見ることができますが、私は配列にもっと何かをする必要があり、テンプレート内の変数を適切に設定する必要があると思います。どんな助けもありがとうございます。

答えて

1

はい。 array_diffは完全なエントリを比較し、必要に応じてファイルマスクでは機能しません。 pathinfo()をご覧になり、ファイルの拡張子を検索し、array_filter()でフィルタリングしてください。

もう1つは、$moviesを配列内にラップする必要があることです。試してみてください $template->render(['movies' => $movies]). そうでなければ、テンプレートファイル(2,3,4,5)の中に数値変数キーがあります。

+0

ありがとうございますnininho!私はそれを今働いています echo $ template-> render(['movies' => $ movies]); – dreadycarpenter

関連する問題