1

我已经搜索并搜索了这个,但我认为我的术语不正确,因为它一直给我 zend 站点的应用程序设置,而不是最终用户的应用程序设置。

我想要一个 config.ini 类型的文件,最终用户可以在其中编辑值。我希望它只是我希望他们看到的设置,并且能够创建我认为的值名称对他们有感觉。所以它会像

[General]
SiteName=MySite
ShowResources=TRUE

[Database]
Server=myServer
databasepath=mydbpath
...

所以我的两个问题。1.这种类型的文件叫什么,因为当我搜索应用程序设置时,我得到的 ZF 应用程序设置不是最终用户的(大概)

  1. 处理此类文件的最佳方法是什么?

谢谢

4

2 回答 2

2
  1. 它是一个 INI 文件,您可以通过 Zend_Config 对其进行读写。
  2. ZF 没有“用户设置”的概念——用户是由您定义的,而不是由框架定义的。

应用程序通常将用户配置存储在数据库中,但这完全取决于您。您可以改为存储 INI 文件的目录。无论哪种方式,您都必须自己进行实施。

编辑:假设您有一个要分发给客户的 ZF 应用程序,并且他们只会使用它连接到一个数据库,这会显着改变事情。(我以为您最初的意思是让应用程序的一个实例同时连接到多个数据库。)

在您的情况下,我会使用标准的 ZF application/configs/application.ini 文件作为您应用程序的“内部”设置。然后,我将在同一个 application/configs 目录中有一个单独的 local.ini(或其他),其中仅包含您希望客户编辑的那些设置。使用应用程序分发一个骨架 local.ini 文件,其中包含说明,如下所示:

; Remove the comment from this line.
;configured = 1

; You need to put your database credentials in here.
db_host = "PUT YOUR DATABASE SERVER NAME HERE"
db_user = "PUT YOUR DATABASE USERNAME HERE"
db_pass = "PUT YOUR DATABASE PASSWORD HERE"

然后只需通过 Zend_Config 加载 local.ini 文件。我还会在您的索引控制器的 init 方法中添加一个检查,以检查您是否配置正确:

$localConfig = Zend_Registry::get('local_config'); // or wherever you put it
if (!$localConfig->configured) {
    $this->_helper->redirector('config', 'error');
}

然后制作一个错误/配置视图,上面写着:

You didn't read the instructions. Go do that now.

请注意,没有什么可以阻止客户编辑他们想要的任何内容,但这会产生逻辑分离,并且更难意外搞砸。

于 2012-06-13T20:29:25.823 回答
2

在您的引导程序中添加:

protected function _initConfig()
{
    $config = new Zend_Config_Ini(APPLICATION_PATH.'/configs/config.ini');

    Zend_Registry::set('config', $config);

    return $config;
}

用您想要的文件名替换 config.ini。

然后,您可以作为应用程序资源或通过注册表 ( Zend_Registry::get('config')) 在应用程序的任何位置访问此配置对象。因此,要从您的示例中获取 SiteName:

$config = Zend_Registry::get('config');
echo $config->General->SiteName;

对于诸如数据库设置之类的事情,您需要在引导程序中访问它们,以便您可以使用它们来设置其他资源。我建议您不要尝试在 application.ini 中包含数据库设置,而是通过添加另一个引导方法手动设置 DB 资源:

protected function _initDb()
{
    $this->bootstrap('config');
    $config = $this->getResource('config');

    $db = Zend_Db::factory('Pdo_Mysql', array(
        'host'     => $config->Database->Server,
        'username' => $config->Database->Username,
        'password' => $config->Database->Password,
        'dbname'   => $config->Database->Dbname
    ));

    return $db;
}

为了进一步解释这一点,$this->bootstrap('config');请确保首先加载配置资源。$this->getResource('config');返回配置资源(由 _initConfig() 方法创建的资源)。然后它使用来自该对象的数据来创建数据库连接。

于 2012-06-14T11:49:22.723 回答