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 f0d14feea0647d3e5dd96d188a593ef54d82b047 (commit)
via 7a090df53de676d5b1f2b4dfbcd8eadc89385077 (commit)
via 45a102f65cb07b12572066657a7878e5ba81c4ec (commit)
via a0c977fd9bd741e7cddc7e74ac6dcbb3b4d7c322 (commit)
via 59c1705983d455a37d200f5535726cddb882a15f (commit)
via 6f0593441282df153aa2dd58c4a1b32a5fc35905 (commit)
from 855a0a63ab714a57b3952194ed791f1ea6e0adc4 (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 f0d14feea0647d3e5dd96d188a593ef54d82b047
Merge: 855a0a6 7a090df
Author: Ivan Borzenkov <iva...@li...>
Date: Mon Apr 25 21:41:44 2011 +0400
Merge branch 'newConfig'
commit 7a090df53de676d5b1f2b4dfbcd8eadc89385077
Author: Ivan Borzenkov <iva...@li...>
Date: Mon Apr 25 19:27:23 2011 +0400
Исправлен возможный варнинг
diff --git a/QFW/QuickFW/Config.php b/QFW/QuickFW/Config.php
index bb30547..64b8f2b 100644
--- a/QFW/QuickFW/Config.php
+++ b/QFW/QuickFW/Config.php
@@ -113,6 +113,7 @@ class QuickFW_Config implements ArrayAccess
$data = array();
foreach($files as $file)
{
+ $new = array();
if (is_file($file))
$new = include($file);
if ($new == 1 && isset($config))
commit 45a102f65cb07b12572066657a7878e5ba81c4ec
Author: Ivan Borzenkov <iva...@li...>
Date: Mon Apr 25 18:36:49 2011 +0400
Добавлен правильный мерж конфигов
diff --git a/QFW/QuickFW/Config.php b/QFW/QuickFW/Config.php
index eefe211..bb30547 100644
--- a/QFW/QuickFW/Config.php
+++ b/QFW/QuickFW/Config.php
@@ -117,7 +117,7 @@ class QuickFW_Config implements ArrayAccess
$new = include($file);
if ($new == 1 && isset($config))
$new = $config;
- $data = array_merge_recursive($data, $new);
+ $data = array_merge_replace_recursive($data, $new);
}
return $data;
}
@@ -129,3 +129,36 @@ class QuickFW_Config implements ArrayAccess
public function __unset($offset) { return $this->offsetUnset($offset); }
}
+
+/**
+ * Merges any number of arrays of any dimensions, the later overwriting
+ * previous keys, unless the key is numeric, in whitch case, duplicated
+ * values will not be added.
+ *
+ * The arrays to be merged are passed as arguments to the function.
+ *
+ * @access public
+ * @return array Resulting array, once all have been merged
+ */
+function array_merge_replace_recursive()
+{
+ // Holds all the arrays passed
+ $params = func_get_args();
+ // First array is used as the base, everything else overwrites on it
+ $return = array_shift($params);
+ // Merge all arrays on the first array
+ foreach ($params as $array)
+ foreach ($array as $key => $value)
+ // Numeric keyed values are added (unless already there)
+ if (is_numeric($key) && (!in_array($value, $return)))
+ if (is_array($value))
+ $return[] = array_merge_replace_recursive($return[$key], $value);
+ else
+ $return[] = $value;
+ else // String keyed values are replaced
+ if (isset($return[$key]) && is_array($value) && is_array($return[$key]))
+ $return[$key] = array_merge_replace_recursive($return[$key], $value);
+ else
+ $return[$key] = $value;
+ return $return;
+}
diff --git a/QFW/QuickFW/Url.php b/QFW/QuickFW/Url.php
index a73611b..5bc2d79 100644
--- a/QFW/QuickFW/Url.php
+++ b/QFW/QuickFW/Url.php
@@ -83,9 +83,9 @@ class Url
*/
public static function Init($base='')
{
- $base = $base ? $base : QFW::$config['redirection']['baseUrl'];
+ $base = $base ? $base : QFW::$config['redirection']['baseUrl'];
$c = str_replace(__CLASS__, '', get_called_class()).'QFW';
- static::$config = $c::$config['redirection'];
+ static::$config = clone $c::$config['redirection'];
static::$config['base'] = $base.(static::$config['useIndex'] ? 'index.php/' : '');
static::$config['ext'] = static::$config['defExt'] ? static::$config['defExt'] :
(QuickFW_Router::PATH_SEPARATOR == '/' ? '/' : '');
diff --git a/application/host.quickfw.my.php b/application/host.quickfw.my.php
new file mode 100644
index 0000000..5fc2510
--- /dev/null
+++ b/application/host.quickfw.my.php
@@ -0,0 +1,7 @@
+<?php
+
+return array(
+ 'host' => array(
+ 'lang' => 'en_US',
+ ),
+);
commit a0c977fd9bd741e7cddc7e74ac6dcbb3b4d7c322
Author: Ivan Borzenkov <iva...@li...>
Date: Mon Apr 25 18:05:13 2011 +0400
Исправлена ошибка в конфиге
diff --git a/QFW/QuickFW/Config.php b/QFW/QuickFW/Config.php
index 0de1e69..eefe211 100644
--- a/QFW/QuickFW/Config.php
+++ b/QFW/QuickFW/Config.php
@@ -114,9 +114,10 @@ class QuickFW_Config implements ArrayAccess
foreach($files as $file)
{
if (is_file($file))
- $data = include($file);
- if ($data == 1 && isset($config))
- $data = $config;
+ $new = include($file);
+ if ($new == 1 && isset($config))
+ $new = $config;
+ $data = array_merge_recursive($data, $new);
}
return $data;
}
commit 59c1705983d455a37d200f5535726cddb882a15f
Author: Ivan Borzenkov <iva...@li...>
Date: Mon Apr 25 12:38:28 2011 +0400
Дока по кофигу
diff --git a/doc/asciidoc/config.txt b/doc/asciidoc/config.txt
index 6de2f13..996d4f7 100644
--- a/doc/asciidoc/config.txt
+++ b/doc/asciidoc/config.txt
@@ -6,7 +6,7 @@
В папаке +APPPATH/config+ могут находится произвольные файлы с расширением php, которые должны возвращать скаляр, массив или объект, реализующий интерфейс +ArrayAccess+ через оператор return или в переменной $config.
При отсутствии в главном конфигурационном массиве элемента с указанным именем делается попытка подгрузить одноименный файл.
-Для каждого конфигурационного файла можно сделать "отклонения" добавив к имени файла суффикс с именем хоста (+$_SERVER[\'HTTP_HOST']+) или именем сервера (+$_SERVER[\'SERVER_NAME']+) -
+По умолчанию для каждого конфигурационного файла можно сделать "отклонения" добавив к имени файла суффикс с именем хоста (+$_SERVER[\'HTTP_HOST']+) или именем сервера (+$_SERVER[\'SERVER_NAME']+) -
при запуске на этом хосте подгрузятся все файлы - сначало основной, а потом файлы, специфичные для сервера и хоста.
.Отклонения конфигов
@@ -85,3 +85,10 @@ return 'param';
=====================================================================
Параметры откланений и пути к конфигурационным файлам можно настроить в функциях +main+ и +files+ в классе +QuickFW_Config+ (+QFW/QuickFW/Config.php+).
+
+Настройка сервера
+~~~~~~~~~~~~~~~~~
+
+Переменная +SERVER_NAME+ берется из настроек сервера, а переменная +HTTP_HOST+ из заголовка запросов. +SERVER_NAME+ удобно использовать для разделения серверов (production, pre-production, testing, devel и других) а +HTTP_HOST+ для настройки параметров специфичных для алиасов например контроллер и экшен по умолчанию.
+Для того чтобы все алиасы хоста имели одинаковый +SERVER_NAME+ в apache нужно установить параметр +UseCanonicalName+.
+В nginx значение берется из первого имени сервера - не рекомендутся использовать там регулярное выражение, так как оно напрямую будет помещено в +SERVER_NAME+.
\ No newline at end of file
commit 6f0593441282df153aa2dd58c4a1b32a5fc35905
Author: Ivan Borzenkov <iva...@li...>
Date: Mon Apr 25 01:57:02 2011 +0400
Настраиваемый конфиг
diff --git a/QFW/Init.php b/QFW/Init.php
index 3ea7dfc..4783392 100644
--- a/QFW/Init.php
+++ b/QFW/Init.php
@@ -51,15 +51,7 @@ class QFW
*/
static public function config()
{
- require QFWPATH.'/config.php';
- require APPPATH.'/default.php';
-
- if (!isset($_SERVER['HTTP_HOST']))
- die('$_SERVER[\'HTTP_HOST\'] NOT SET');
- $file = APPPATH.'/'.$_SERVER['HTTP_HOST'].'.php';
- if (is_file($file))
- require ($file);
- return new QuickFW_Config($config, APPPATH.'/config');
+ return QuickFW_Config::main();
}
/**
diff --git a/QFW/QuickFW/Config.php b/QFW/QuickFW/Config.php
index 1ac1f30..0de1e69 100644
--- a/QFW/QuickFW/Config.php
+++ b/QFW/QuickFW/Config.php
@@ -5,6 +5,44 @@
*/
class QuickFW_Config implements ArrayAccess
{
+ /**
+ * Генерирует список файлов конфигураций
+ *
+ * @param string|false $prefix префикс
+ * @return array массив файлов
+ */
+ static private function files($prefix)
+ {
+ if ($prefix === false)
+ {
+ $files = array();
+ $files[] = QFWPATH.'/config.php';
+ $files[] = APPPATH.'/default.php';
+ if (isset($_SERVER['SERVER_NAME']))
+ $files[] = APPPATH.'/serv.'.$_SERVER['SERVER_NAME'].'.php';
+ if (isset($_SERVER['HTTP_HOST']))
+ $files[] = APPPATH.'/host.'.$_SERVER['HTTP_HOST'].'.php';
+ return $files;
+ }
+ $files = array();
+ $files[] = $prefix.'.php';
+ if (isset($_SERVER['SERVER_NAME']))
+ $files[] = $prefix.'.serv.'.$_SERVER['SERVER_NAME'].'.php';
+ if (isset($_SERVER['HTTP_HOST']))
+ $files[] = $prefix.'.host.'.$_SERVER['HTTP_HOST'].'.php';
+ return $files;
+ }
+
+ /**
+ * Генерация основного конфига
+ *
+ * @return array|mixed|QuickFW_Config вложенный массив
+ */
+ static public function main()
+ {
+ return new self(self::loadFromFiles(self::files(false)), APPPATH.'/config');
+ }
+
private $data = array();
/**
* @var string Директория конфигурации
@@ -46,7 +84,7 @@ class QuickFW_Config implements ArrayAccess
public function offsetGet($offset) {
if ($this->dir && !isset($this->data[$offset]))
- $this->data[$offset] = $this->loadFromFile($offset);
+ $this->data[$offset] = $this->load($offset);
return $this->data[$offset];
}
public function offsetExists($offset) { return isset($this->data[$offset]); }
@@ -58,22 +96,29 @@ class QuickFW_Config implements ArrayAccess
* @param string $name имя файла
* @return array|mixed|QuickFW_Config вложенный массив
*/
- private function loadFromFile($name)
+ private function load($name)
+ {
+ $data = self::loadFromFiles(self::files($this->dir.'/'.$name));
+ return is_array($data) ? new self($data, $this->dir.'/'.$name) : $data;
+ }
+
+ /**
+ * Пробуем загрузить файл из текущей директории
+ *
+ * @param array $files файлы
+ * @return array|mixed|QuickFW_Config вложенный массив
+ */
+ static private function loadFromFiles($files)
{
- $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))
+ foreach($files as $file)
{
- $data = include($hf);
+ if (is_file($file))
+ $data = include($file);
if ($data == 1 && isset($config))
$data = $config;
}
- return is_array($data) ? new self($data, $this->dir.'/'.$name) : $data;
+ return $data;
}
//as prop
diff --git a/doc/asciidoc/config.txt b/doc/asciidoc/config.txt
index 9dbd85c..6de2f13 100644
--- a/doc/asciidoc/config.txt
+++ b/doc/asciidoc/config.txt
@@ -2,12 +2,12 @@
------------
Для чтения конфигов используется переменная +QFW::$config+. Она представляет собой класс к которому можно обращаться как к массиву.
-Конфигурация может быть разбита на несколько файлов. Главный конфигурационный файл находится в папке приложения (+APPPATH+) и называется +default.php+, в нем должен быть определен массив $config
+Конфигурация может быть разбита на несколько файлов. Главный конфигурационный файл находится в папке приложения (+APPPATH+) и называется +default.php+, в нем должен быть определен массив $config или возвращаться через оператор return.
В папаке +APPPATH/config+ могут находится произвольные файлы с расширением php, которые должны возвращать скаляр, массив или объект, реализующий интерфейс +ArrayAccess+ через оператор return или в переменной $config.
При отсутствии в главном конфигурационном массиве элемента с указанным именем делается попытка подгрузить одноименный файл.
-Для каждого конфигурационного файла можно сделать "отклонения" добавив к имени файла суффикс с именем хоста (+$_SERVER[\'HTTP_HOST']+) -
-при запуске на этом хосте подгрузятся оба файла - сначало основной, а потом файл, специфичный для хоста.
+Для каждого конфигурационного файла можно сделать "отклонения" добавив к имени файла суффикс с именем хоста (+$_SERVER[\'HTTP_HOST']+) или именем сервера (+$_SERVER[\'SERVER_NAME']+) -
+при запуске на этом хосте подгрузятся все файлы - сначало основной, а потом файлы, специфичные для сервера и хоста.
.Отклонения конфигов
=====================================================================
@@ -20,7 +20,7 @@ $config = array(
);
---------------------------------------------
-+application/default.site.my.php+:
++application/default.host.site.my.php+:
[source,php]
---------------------------------------------
@@ -38,7 +38,7 @@ return array(
);
---------------------------------------------
-+application/config/capcha.site.my.php+:
++application/config/capcha.serv.site.my.php+:
[source,php]
---------------------------------------------
@@ -83,3 +83,5 @@ return 'param';
array('file' => 'param', )
=====================================================================
+
+Параметры откланений и пути к конфигурационным файлам можно настроить в функциях +main+ и +files+ в классе +QuickFW_Config+ (+QFW/QuickFW/Config.php+).
-----------------------------------------------------------------------
Summary of changes:
QFW/Init.php | 10 +---
QFW/QuickFW/Config.php | 106 ++++++++++++++++++++++++++++++++++-----
QFW/QuickFW/Url.php | 4 +-
application/host.quickfw.my.php | 7 +++
doc/asciidoc/config.txt | 19 +++++--
5 files changed, 117 insertions(+), 29 deletions(-)
create mode 100644 application/host.quickfw.my.php
hooks/post-receive
--
quickfw
|