如果通过控制器或模型访问文件系统,请使用Zend Framework


Using the Zend Framework should the file system be accessed via the controller or a model

应该通过控制器直接访问服务器或网络共享,还是创建某种模型?

我可以在控制器中使用这样的代码:

$path = '/var/www/uploads';
$fileArray = array();
$dir = new DirectoryIterator($path);
foreach ($dir as $fileinfo) {
  if (!$fileinfo->isDot()) {
    $fileArray[] = array('filename' => $fileinfo->getFilename(), 'extension' => $fileinfo->getExtension(), 'size' => $this->bytesToSize($fileinfo->getSize(),2), 'modified' => date('d/m/Y H:i', $fileinfo->getMTime())); 
  }
}
$this->view->fileList = $fileArray;

这意味着每次都要重复,这似乎是MVC中错误的做法。我应该创建一个映射文件系统的模型,还是Zend有可以做到这一点的domething?

例如//伪代码

$directory = new Zend_Directory();
$this->view->filelist = $directory->listFiles();
$directory->addFile('filepath');
$directory->deleteFile('filepath');

具有类似的功能,上传、删除、重命名、移动、复制等。

有什么想法吗?

使其成为一个模型。通过这种方式,您可以进行单元测试,轻松地交换新的控制器,并在其他项目中重用该模型。

一个好的经验法则是:如果它直接与数据(数据库、服务、文件等)交互,那么就将其作为模型。

实际上,有一个关于Zend_DirectoryZend_File(链接)的提案,但自2009年以来,似乎没有进行任何工作。

您可能需要考虑将代码打包为其他人可以使用的插件。也许可以用我上面发布的链接作为起点。