2013-10-30 111 views
1

我想将一些数据(来自定制控制器插件)写入我的网站公共目录的'messages'子目录下的文件。ZF2公共目录的真实路径

定制控制插件很简单:

<?php 

namespace Main\Service; 

class MessageWriter 
{  
    public $data = array(); 

    public function __set($name, $value) 
    { 
     $this->data[$name] = $value; 
    } 

    public function write_message() 
    { 
     $this->time = time(); 
     $data = serialize($this->data); 

     $filename = time() . '_' . rand(1000, 9999); 
     @file_put_contents('/var/www/public/messages/' . $filename, $data); 
    } 

} 

?> 

我有两个小问题/问题:

  1. 如何避免路径的硬编码?没有保存公共目录(/ var/www/public)的真实路径的ZF2配置变量。
  2. 在ZF2中是否有用于编写文件的类,或者使用file_put_contents和类似的文件函数可以吗?

非常感谢!

迈克

回答

2

在ZF2,所有路径都是相对于应用程序根目录的,所以你应该可以使用file_put_contents('public/messages/' . $filename, $data)。而file_put_contents()可以使用。

+0

谢谢你的帮助! – user2939345

+0

这一切路径都是相对的东西都不错,直到我不必使用它太多。想象一下,你必须在几个插件,控制器(写入,打开文件,检查文件是否存在等)中对公共目录的名称(在这种情况下:public)进行硬编码。然后 - 出于某种原因 - 您必须将其从公共更改为public_new。因此,您必须在任何地方更改硬编码值,代码的便携性会降低。如果拥有一些用于保存公用目录名称的全局配置变量,将会非常好。 – user2939345

+0

如果您想沿着这条路线走,而不是为公共文件夹设置一些全局配置,我会为消息添加一个配置路径,然后您可以将它注入到MessageWriter服务中。 –

0

尝试...

APPLICATION_PATH.'/../public/messages/'.$filename 

编辑:刚刚意识到这是ZF2不ZF1 ...

一切是相对于应用程序路径ZF2

+0

谢谢你的帮助! – user2939345