我想使用默认配置文件构建基本主题,然后我想使用与主主题合并的配置文件构建子主题。我应该使用Kohana :: config类来管理它,还是最好通过包含配置数组并将其与主配置合并来手动处理?到目前为止,我还没有能够加载配置文件,因为我已将它们放在自己的目录中。
基本上我要做的是设置一个结构:
application
|--> classes
|--> myclass
|--> myclass.php // default parent class. Loads the config
|--> config.php // array of default config settings
|--> theme
|--> blue
| |--> blue.php // extends myclass.php
| |--> config.php // merges over the default config settings
|--> red
| |--> red.php // extends myclass.php
| |--> config.php // merges over the default config settings
|--> green
|--> green.php // extends myclass.php
|--> config.php // merges over the default config settings
所以我可以调用类似的东西:
$theme = new Myclass_Theme_Red_Red();
并使用Myclass_Myclass的默认配置加载主题,然后将红色主题合并到默认值上。我希望这是有道理的。
那么在这种结构中处理配置设置的最佳方法是什么 - 还是完全有更好的方法?我不想将所有配置文件移动到application / config中,因为我希望它们与各个主题保持一致。
答案 0 :(得分:0)
我将配置文件放入一个配置目录,该目录是 classes 目录的兄弟。
所以你的新目录结构是:
application
|- classes
|- config (your files go in here)
|-- theme (and can be in their own namespaced directory)
|--- green
|--- red
|--- blue
这是您的配置文件应始终使用的位置。如果您需要做一些Kohana不支持的事情,那么您可以在(模块)bootstrap [1]中添加自定义配置阅读器。
Kohana::$config->attach(new Kohana_Config_File);
[1]在Kohana附加新的配置阅读器
一个常见的例子是从子目录加载配置文件,可以通过以下方式实现:
Kohana::$config->attach(new Kohana_Config_File);
Kohana::$config->attach(new Kohana_Config_File('config'.DIRECTORY_SEPARATOR.Kohana::$environment));
这允许我在Kohana的每个环境中使用不同的配置设置。
如果您迫切希望将配置文件保留在类中,则可能需要将每个主题作为单独的模块。
答案 1 :(得分:0)
如果您迫切希望将配置文件与您的类保持一致 可能想让每个主题成为一个单独的模块。
无需将每个主题作为单独的模块。实际上,每个模块都有一个主题文件夹更有意义。
假设您有一个模块,并且在该模块中您有一个主题目录。
my-module
|- classes
|- config (your module's config files go in here)
|-- my-module.php
|- themes (in own directory)
|-- green
|--- config
|---- green-config.php
|-- red
|-- blue
然后你可以像这样加载配置文件:
Kohana::$config->attach(new Kohana_Config_File('themes/green/config'));
$config = Kohana::$config->load('green-config');
echo $config->test; //Hello World!
green-config.php
<?php defined('SYSPATH') or die('No direct access allowed.');
return array('test'=>'Hello World!');
此外,要快速测试Kohana是否可以访问文件:
Kohana::find_file('themes', 'green/config/green-config');