Что на первом месте, фреймворк или приложение? Динамические рамки и папки приложений - PullRequest
1 голос
/ 18 июля 2010

Хорошо, я создаю 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 , может быть?).

Кроме того, файл конфигурации приложения должен быть загружен до загрузки файлов фреймворка, что мне кажется немного странным ...

Есть ли простой способ сделать это так, чтобы в запросе указывалось приложение, а в приложении указывалось, какую инфраструктуру использовать, или вышеуказанный способ самый простой?

Извините, если это сбивает с толку! Смутил меня немного, написав это;)

1 Ответ

0 голосов
/ 18 июля 2010

Я использую Symfony большую часть времени, поэтому я буду применять свои знания там, когда отвечу на ваши вопросы:

Есть ли простой способ сделать это так, чтобы запрос указывалapplication

Используйте несколько «index.php» (или используйте ?app=xxx) с комбо URL-rewrite .Это делает вещи немного чище.

Кроме того, файл конфигурации приложения должен быть загружен перед загрузкой файлов инфраструктуры, что мне немного странно ...

Это не странно, вам, безусловно, нужно настроить и инициировать некоторые состояния перед загрузкой вашей платформы, но, возможно, вы захотите предоставить подкласс класса начальной загрузки вашей платформы, чтобы определить, что должно быть сделано во время начальной загрузки платформы.

Я рекомендую вам заглянуть в Symfony2 , чтобы узнать, как они модулируют / управляют библиотеками и зависимостями.Серьезно, нет никакой причины писать другую структуру, кроме как вносить вклад в существующую - если только вы не обнаружите, что они не разделяют ваши взгляды с вашими.

...