2013-03-04 23 views
0

目的:我想知道是否有可能以确定主机是否是本地主机或我的开发网站在一个地方 Zend Framework中的主机和使用整个其余的是决心该网站通过会话变量。在哪里使用gethostname在Zend的

详情:我正在与一小群人一起在网站上工作。我们使用svn工具来合并我们的代码,并在将更改和附加内容移至开发服务器之前在本地主机上进行测试。由于在每个平台中都使用相同的代码,我们在php中使用gethostname()来确定我们是通过本地主机还是服务器访问我们的网站。我们需要这个,所以我们可以适当地设置文件路径(http://localhost/images/dog.jpg vs https://mysite.com/images/dog.jpg)。最初,每当这种情况发挥作用时,我们在控制器的public function init()中设置一个变量$ host,该变量包含在整个页面中使用的适当字符串。然后我们转而将$ host放在会话变量中,这大大减少了冗余代码的数量。但我确定有一种方法可以在的一个地方设置并且完成它,但我不知道这个地方会在哪里(在Zend框架内)。索引登陆页面不起作用,因为用户可能会从其他地方进入。我最好的猜测是将其设置在布局中,但是这给了我错误,因为布局代码在页面加载过程中运行得太晚。有没有更好的地方来确定主机?有没有在布局代码中设置优先级的方法,以便在页面需要之前以某种方式执行?

代码:

if(!isset($_SESSION['hostname'])){ 
    $hostname = gethostname(); 
    if ($hostname == 'prodserver') { 
    $_SESSION['hostname'] = 'https://mysite.com'; 
    } else { 
    $_SESSION['hostname'] = 'http://localhost'; 
    } 
} 

我们目前的方法工作得很好,但我不能动摇的感觉,必须有一个更好的办法!如果你知道的话 - 我很乐意听到它。谢谢!

+1

为什么要首先将主机名添加到生成的URL? – prodigitalson 2013-03-04 17:37:58

+0

所以我们可以做完整路径调用。 (这部分不是我的决定。) – lostphilosopher 2013-03-04 17:50:35

+2

只需使用绝对路径,即以'/'开头的路径。没有理由在内部链接上包含主机名,这只会增加复杂性。 – 2013-03-04 18:03:50

回答

2

要回答评论中的问题,no,会话变量按照用户特定的定义进行定义。然而,ZF(按照惯例)设置常数APPLICATION_ENV,其可用于执行特定于环境的检查。你也可以通过设置变量(包括baseUrl)。 application.ini这将是你将如何解决你的问题,如果你需要的话。

+0

啊! application.ini是有道理的。谢谢。 – lostphilosopher 2013-03-04 19:30:12