首先是框架还是应用程序?动态框架和应用程序文件夹

时间:2010-07-18 19:20:06

标签: php model-view-controller web-applications frameworks

好的,所以我在PHP中创建一个MVC框架,我希望它非常灵活。这一切都很好 - 我现在正在研究这个问题,事情进展顺利(所以我不想使用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

Bootstrap文件 /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 文件必须知道所有可能的应用程序,因此用户需要编辑 /index.php中的switch语句(或 /index.php 包含的 /apps.php 文件,可能?)。

此外,在加载框架文件之前,必须先加载应用程序的配置文件,这对我来说似乎有点奇怪......

是否有一种简单的方法可以使请求指定应用程序,并且应用程序指定使用哪个框架,或者上述方式最简单?

对不起,如果这令人困惑!让我困惑的是写了一下;)

1 个答案:

答案 0 :(得分:0)

我大部分时间都使用Symfony,所以在回答你的问题时我会在那里运用我的知识:

  

是否有一种简单的方法可以使请求指定应用程序

使用多个“index.php”(或使用?app=xxx)和URL-rewrite组合。这让事情变得更清洁了。

  

此外,在加载框架文件之前必须加载应用程序的配置文件,这对我来说似乎有点奇怪......

这并不奇怪,你当然需要在引导框架之前配置和启动一些状态,但也许你可能想要提供框架引导类的子类,以定义在框架引导期间应该做什么。

我建议您查看Symfony2以了解它们如何模块化/管理库和依赖项。说真的,没有理由去编写另一个框架,但要为现有框架做出贡献 - 除非你发现它们与你的框架没有共享相同的愿景。