我有以下代码(见下文),它是基于URL加载特定文件夹,通过在行echo $page[] = $fileinfo->getPathname();
中添加echo我得到预期的结果(相关文件夹中的所有文件)
我现在只需要将带有路径名的变量传递给我的视图,以便加载相关的图像:
控制器代码
public function action_flipbook($page = '') {
FB::log($this->request->param('id1'));
$this->template->content = View :: factory('flipbook/default');
// give me a list of all files in folder assets/flipbook_images/.$this->request->param('id1')
$dir = new DirectoryIterator('assets' . DIRECTORY_SEPARATOR .'images'. DIRECTORY_SEPARATOR .'flipbook'. DIRECTORY_SEPARATOR . $this->request->param('id1'). DIRECTORY_SEPARATOR);
$this->template->content->pages = array($page);
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
// $page[] = $fileinfo->getFilename();
echo $page[] = $fileinfo->getPathname();
}
}
}
查看代码
<?php
foreach ($pages as $page) {
echo '<div><img src="'.$page.'" /></div>';
}
?>
通过添加 var_dump($ page) echo '<div><img src="'.var_dump($page).'" /></div>';
我得到的数组打印如下:array(120) { [0]=> string(37) "assets\images\flipbook\au\1-large.jpg" [1]=> string(31) "assets\images\flipbook\au\1.jpg" [2]=> string(38) "assets\images\flipbook\au\10-large.jpg" [3]=> string(32) "assets\images\flipbook\au\10.jpg"
显示正确的路径?
答案 0 :(得分:1)
我们不了解您的框架以及如何完成分配,但您似乎正在这样做
$this->template->content->someVar = 'something';
在你的情况下,你在此方法中将$ page作为空参数,所以我假设在调用之前:
$this->template->content->pages = array($page);
$ page是空字符串,因此您正在构建一个传递给视图的空字符串数组,该字符串不会生成任何页面。
稍后你会生成$page
数组,也许这就是你要传递给视图的输出。
然后,在构建实际数组
之后,必须移动分配foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
$page[] = $fileinfo->getFilename();
}
}
$this->template->content->pages = $page;
$ page已经是一个数组($page[] = ...
),所以你不需要把它放在另一个数组中。
答案 1 :(得分:0)
我认为控制器代码和视图代码位于不同的文件中。
如果是这种情况,则$ page将类似于视图文件中的全局变量
有一件事我注意到你在$ page []数组中分配路径名并迭代$ pages数组(最后有s)
在视图文件中声明$ pages数组作为全局变量并遍历它。虽然这不是将变量从控制器传递到视图的正确方法,但是您可以使用此技术检查一切是否正常工作,并且稍后传递变量,假设要在模型 - 视图 - 控制器模式中传递
<?php
global $page ;
foreach ($page as $page_single) {
echo '<div><img src="'.$page_single.'" /></div>';
}
?>