如何在Zend Framework中设置特定于站点的配置与应用程序配置?

时间:2010-06-13 14:17:45

标签: zend-framework

作为Zend Framework的新手,我一直在阅读并尝试在我购买的网络和书籍上的各种教程。所有教程都做的一件事是将某些值硬编码到引导程序或其他代码中。例如,设置标题:

  

$这 - > _view-> headTitle( '的MySite');

我意识到这可以在application.ini文件中设置,但如果您将应用程序分发到其他站点,我认为这不合适。

我很想听听在application.ini文件中设置应用程序特定设置并加载的想法

$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH.'/configs/application.ini'
);

然后在引导程序的某处,检查config.ini文件并将它们添加到当前现有的应用程序配置数组中,如果config.ini不存在,则从数据库中检索此类特定于站点的配置并编写config.ini文件(显然,如果在数据库中更改了值,则删除并重写文件)。 我不需要查看文件是如何编写的或者不是什么...只是对其他人如何处理这些事情的一般概念。或提供不同的想法吗?

在设置各种特定于站点的配置时,我宁愿最终使用类似的东西:

$this->_view->headTitle($config->site->title);

希望这是有道理的: - )

3 个答案:

答案 0 :(得分:1)

请记住,您可以将许多配置文件传递给Zend_Application,而不仅仅是application.ini, 所以这可能是你个案中最好的。

如果您非常依赖配置,您可能会对使用您通过config.ini提供给Zend_Application的特定设置创建其他应用程序资源感兴趣。

但我敢打赌,未来,您将把这些选项存储在数据库中,并允许最终用户修改它们。

在最简单的情况下,我更喜欢解决方案:

// in the layout.phtml
$this->render('head.phtml');
...
$this->render('footer.phtml');

在网站特定的页脚和头部配置中。

快速且易于维护。

答案 1 :(得分:1)

在view_script.phtml中

$this->headTitle()->prepend($config->site_title);

麻烦在哪里?

答案 2 :(得分:1)

这取决于您在配置文件中需要什么样的数据,以及如何在不同的网站上重复使用您的应用程序。

虽然将文件名作为Zend_Application的第二个参数传递给配置文件是正常的,但您也可以传递Zend_Config对象。 Zend_Config本身可以很容易地将多个配置文件合并在一起,所以在你的public / index.php中你可以这样做:

$defaultConfigFilename = APPLICATION_PATH . '/configs/application.ini';
$siteConfigFilename = APPLICATION_PATH . '/configs/site.ini';

// Create config object, using site-specific data if available
$config = new Zend_Config_Ini($defaultConfigFilename, null, true);
if (file_exists($siteConfigFilename)) {
    $siteConfig = new Zend_Config_Ini($siteConfigFilename);
    $config->merge($siteConfig)
        ->setReadOnly();
}

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    $config
);

这将查找site.ini文件,如果存在,则将其与应用程序ini合并。然后它将正常引导应用程序。

我最近使用的另一种方法是尽可能地将application.ini保持为最小(例如只有bootstrap类名和位置),然后在我的bootstrap类中创建一个_initSite()方法来创建一个Site对象使用数据库中的数据。然后它从ini文件中读取配置数据,并将其存储在Site对象中。然后,我有一个网站资源,我可以在我的应用程序的其他地方访问,例如做$ view-> _headTitle($ site-> config-> title);就像你上面的例子一样。

我希望这会给你一些想法。 ZF非常灵活!