This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "quickfw".
The branch, master has been updated
via 627ae4c38d52c27683a3658f5ad41f79dc121a5a (commit)
via 1478bf0b67e0c32c1bda16e828fba1a56be3f049 (commit)
from cfe9bf0889c406aff8dc978d0fdc113e5ab27b38 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 627ae4c38d52c27683a3658f5ad41f79dc121a5a
Author: Ivan Borzenkov <iva...@li...>
Date: Wed Apr 6 05:33:23 2011 +0400
В доке описана подгрузка по требованию
diff --git a/QFW/QuickFW/Config.php b/QFW/QuickFW/Config.php
index 6276000..1ac1f30 100644
--- a/QFW/QuickFW/Config.php
+++ b/QFW/QuickFW/Config.php
@@ -46,29 +46,35 @@ class QuickFW_Config implements ArrayAccess
public function offsetGet($offset) {
if ($this->dir && !isset($this->data[$offset]))
+ $this->data[$offset] = $this->loadFromFile($offset);
+ return $this->data[$offset];
+ }
+ public function offsetExists($offset) { return isset($this->data[$offset]); }
+ public function offsetUnset($offset) { unset($this->data); }
+
+ /**
+ * Пробуем загрузить файл из текущей директории
+ *
+ * @param string $name имя файла
+ * @return array|mixed|QuickFW_Config вложенный массив
+ */
+ private function loadFromFile($name)
+ {
+ $file = $this->dir.'/'.$name.'.php';
+ $data = array();
+ if (is_file($file))
+ $data = include($file);
+ if ($data == 1 && isset($config))
+ $data = $config;
+ $hf = $this->dir.'/'.$name.'.'.$_SERVER['HTTP_HOST'].'.php';
+ if (is_file($hf))
{
- //пробуем загрузить файл
- $file = $this->dir.'/'.$offset.'.php';
- $data = array();
- if (is_file($file))
- $data = include($file);
+ $data = include($hf);
if ($data == 1 && isset($config))
$data = $config;
- $hf = $this->dir.'/'.$offset.'.'.$_SERVER['HTTP_HOST'].'.php';
- if (is_file($hf))
- {
- $data = include($hf);
- if ($data == 1 && isset($config))
- $data = $config;
- }
- $this->data[$offset] = is_object($data) ? $data : (
- is_array($data) ? new self($data, $this->dir.'/'.$offset) :
- $data);
}
- return $this->data[$offset];
+ return is_array($data) ? new self($data, $this->dir.'/'.$name) : $data;
}
- public function offsetExists($offset) { return isset($this->data[$offset]); }
- public function offsetUnset($offset) { unset($this->data); }
//as prop
public function __get($offset) { return $this->offsetGet($offset); }
diff --git a/doc/asciidoc/config.txt b/doc/asciidoc/config.txt
index 1b816ff..9dbd85c 100644
--- a/doc/asciidoc/config.txt
+++ b/doc/asciidoc/config.txt
@@ -5,12 +5,11 @@
Конфигурация может быть разбита на несколько файлов. Главный конфигурационный файл находится в папке приложения (+APPPATH+) и называется +default.php+, в нем должен быть определен массив $config
В папаке +APPPATH/config+ могут находится произвольные файлы с расширением php, которые должны возвращать скаляр, массив или объект, реализующий интерфейс +ArrayAccess+ через оператор return или в переменной $config.
При отсутствии в главном конфигурационном массиве элемента с указанным именем делается попытка подгрузить одноименный файл.
-Так-же в +APPPATH/config+ могут находиться вложенные папки, которые считаются вложенным массивом. Таким образом иерархия файлов в папке проецируется на массив.
Для каждого конфигурационного файла можно сделать "отклонения" добавив к имени файла суффикс с именем хоста (+$_SERVER[\'HTTP_HOST']+) -
при запуске на этом хосте подгрузятся оба файла - сначало основной, а потом файл, специфичный для хоста.
-.Пример
+.Отклонения конфигов
=====================================================================
+application/default.php+:
@@ -60,3 +59,27 @@ return array(
=====================================================================
+Так-же в +APPPATH/config+ могут находиться вложенные папки, которые считаются вложенным массивом. Таким образом иерархия файлов в папке проецируется на массив, однако файлы загружаются по требованию - нельзя получить сразу все вложенные файлы и папки - часть иерархии подгружается только при обращении к файлу.
+
+.Загрузка по требованию
+=====================================================================
++application/config/dir/file.php+:
+[source,php]
+---------------------------------------------
+return 'param';
+---------------------------------------------
+
+[source,php]
+---------------------------------------------
+ echo QFW::$config->dir."\n";
+ echo QFW::$config->dir->file."\n";
+ echo QFW::$config->dir."\n";
+---------------------------------------------
+
+Результат:
+
+ array()
+ param
+ array('file' => 'param', )
+
+=====================================================================
commit 1478bf0b67e0c32c1bda16e828fba1a56be3f049
Author: Ivan Borzenkov <iva...@li...>
Date: Wed Apr 6 05:11:40 2011 +0400
Правка дока конфига и возможность возвращать скаляр в файле
diff --git a/QFW/QuickFW/Config.php b/QFW/QuickFW/Config.php
index 29c4f90..6276000 100644
--- a/QFW/QuickFW/Config.php
+++ b/QFW/QuickFW/Config.php
@@ -13,7 +13,9 @@ class QuickFW_Config implements ArrayAccess
// necessary for deep copies
public function __clone() {
- foreach ($this->data as $key => $value) if ($value instanceof self) $this[$key] = clone $value;
+ foreach ($this->data as $key => $value)
+ if ($value instanceof self)
+ $this[$key] = clone $value;
}
public function __construct(array $data = array(), $dir='') {
@@ -59,7 +61,9 @@ class QuickFW_Config implements ArrayAccess
if ($data == 1 && isset($config))
$data = $config;
}
- $this->data[$offset] = is_object($data) ? $data : new self($data, $this->dir.'/'.$offset);
+ $this->data[$offset] = is_object($data) ? $data : (
+ is_array($data) ? new self($data, $this->dir.'/'.$offset) :
+ $data);
}
return $this->data[$offset];
}
diff --git a/doc/asciidoc/config.txt b/doc/asciidoc/config.txt
index 8594f6f..1b816ff 100644
--- a/doc/asciidoc/config.txt
+++ b/doc/asciidoc/config.txt
@@ -3,11 +3,12 @@
Для чтения конфигов используется переменная +QFW::$config+. Она представляет собой класс к которому можно обращаться как к массиву.
Конфигурация может быть разбита на несколько файлов. Главный конфигурационный файл находится в папке приложения (+APPPATH+) и называется +default.php+, в нем должен быть определен массив $config
-В папаке +APPPATH/config+ могут находится произвольные файлы с расширением php, которые должны возвращать массив или объект, реализующий интерфейс +ArrayAccess+ через оператор return или в переменной $config.
+В папаке +APPPATH/config+ могут находится произвольные файлы с расширением php, которые должны возвращать скаляр, массив или объект, реализующий интерфейс +ArrayAccess+ через оператор return или в переменной $config.
При отсутствии в главном конфигурационном массиве элемента с указанным именем делается попытка подгрузить одноименный файл.
+Так-же в +APPPATH/config+ могут находиться вложенные папки, которые считаются вложенным массивом. Таким образом иерархия файлов в папке проецируется на массив.
Для каждого конфигурационного файла можно сделать "отклонения" добавив к имени файла суффикс с именем хоста (+$_SERVER[\'HTTP_HOST']+) -
-при запуске на этом осте подгрузятся оба файла - сначало основной, а потом файл, специфичный для хоста.
+при запуске на этом хосте подгрузятся оба файла - сначало основной, а потом файл, специфичный для хоста.
.Пример
=====================================================================
-----------------------------------------------------------------------
Summary of changes:
QFW/QuickFW/Config.php | 44 +++++++++++++++++++++++++++-----------------
doc/asciidoc/config.txt | 30 +++++++++++++++++++++++++++---
2 files changed, 54 insertions(+), 20 deletions(-)
hooks/post-receive
--
quickfw
|