Хорошо, я создаю MVC-фреймворк на PHP и хочу, чтобы он был достаточно гибким. Это все хорошо - я работаю над этим в данный момент, и все идет хорошо (поэтому я не хочу использовать Zend или другой ранее существующий фреймворк, хаха!), Но я хотел сделать и фреймворк, и приложение довольно динамично Я постараюсь объяснить:
Вот упрощенная структура каталогов:
- index.php (wants to use app1 or app2 depending on domain name)
- /app1 (wants to use framework 1.1)
- /config
- config.php
- /app2 (wants to use framework 1.2)
- /config
- config.php
- /framework_1.1
- /framework_1.2
Файл начальной загрузки / index.php принимает все входящие запросы. Затем он загрузит файл конфигурации определенного приложения из / app1 / config / config.php или / app2 / config / config.php и т. Д., В зависимости от определенного условия, скажем. . HTTP-хост:
// /index.php
switch ( $_SERVER[ 'HTTP_HOST' ] ) {
case 'localhost':
$app_root = ROOT . 'app1/';
break;
case 'site.com':
$app_root = ROOT . 'app2/';
break;
default:
$app_root = ROOT . 'application/';
break;
}
define('APP_ROOT', $app_root);
Затем файл начальной загрузки загружает файл конфигурации приложения:
// /index.php
include( APP_ROOT . 'config/config.php' );
Массив $ config будет возвращен из файла конфигурации приложения, в котором будет указано, где находятся файлы инфраструктуры.
// /app2/config/config.php
$config['framework_root'] = '/framework_1.2/';
Bootstrap запускает эту платформу.
// /index.php
include( $config['framework_root'] . 'config/bootstrap.php' );
Это лучший способ сделать это?
Единственная проблема, связанная с этим, заключается в том, что файл / index.php должен знать обо всех возможных приложениях, поэтому пользователю потребуется отредактировать оператор switch в / index.php *. 1029 * (или файл / apps.php , который входит в / index.php , может быть?).
Кроме того, файл конфигурации приложения должен быть загружен до загрузки файлов фреймворка, что мне кажется немного странным ...
Есть ли простой способ сделать это так, чтобы в запросе указывалось приложение, а в приложении указывалось, какую инфраструктуру использовать, или вышеуказанный способ самый простой?
Извините, если это сбивает с толку! Смутил меня немного, написав это;)