2012-07-07 29 views
2

我有一个包含文本文件的目录,我通常在php中使用DirectoryIterator类avaialble来迭代目录并获取文件名。我无法用CI尝试它。我对CI完全陌生,所以请耐心等待:)。使用Codeigniter的目录迭代

我在我的默认控制器myblog(我在函数后面写了该函数)中有类似的东西。

<?php 

    public function diriterate() 
    { 
     $this->load->helper('directory'); 

     $mapi=directory_map('./myfolder/'); 

     $this->load->view('index.php',$mapi);  
    } 

?> 

,我想在我看来,这样的事情

<?php 
    foreach($mapi as $key) 
    { 
     echo $key; 
    } 
?> 

我在做它完全错误的吗? 。

(1)如果我的理解是正确的,我可以像mysitename /类/函数运行(在我的情况本地主机/ myblog/diriterate(2)我的目录是rootfolder内(rootfolder /我的文件夹),所以不需要baseurl或什么东西?

我应该只是在使用DirectoryIterator类的视图中完成此操作,或者只是为迭代创建另一个控制器,我真的很困惑,任何帮助都是值得欢迎的。

+0

您应该在阅读关于Web应用程序的MVC模式后开始使用CI。这可以帮助您更好地构建应用程序。另请参阅CI用户指南以参考代码点火器配置以及可用的库和类。 – user1190992 2012-07-07 15:09:06

+0

appart从适当的** MVC **结构,当传递数据到**视图**你需要将它作为数组发送('mapi'=> $ mapi) – Jakub 2012-07-07 15:41:11

+0

感谢球员,似乎我需要提高我的把握mvc多一点。 – jathin 2012-07-07 15:52:06

回答

3

遵循MVC约定。

型号型号/ folder_model.php

class Folder_model extends CI_Model { 
    function iterate() { 
     $this->load->helper('directory'); 
     $map = directory_map('./myfolder', 1); 
     return $map; 
    } 
} 

对于目录地图,它会看在你的应用程序的根目录,这意味着路径包括index.php。请注意,1将导致它不是递归的,只能在该顶级路径上使用。

控制器控制器/ folder.php

class Folder extends CI_Controller { 
    function index() { 
     $this->load->model('folder_model'); 
     $map = $this->folder_model->iterate(); 

     $this->load->view('folder', array('map' => $map)); 
    } 
} 

查看视图/ folder.php

<? foreach ($map as $item): ?> 
    <?= $item ?> 
<? endforeach; ?> 

然后,这将是在http://localhost/index.php/folder可见。

+0

非常感谢,我想我可以在不使用模型的情况下完成这个任务,有没有这种可能性? – jathin 2012-07-07 15:56:31

+1

你应该总是使用MVC约定。如果您的代码库变得更大,并且您将所有内容都推送到了控制器中,那么您就击败了MVC的目的,并且您的代码将真正混乱。总而言之,它会最终帮助你。 – 2012-07-07 15:57:45