好的,所以我在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 文件,可能?)。
此外,在加载框架文件之前,必须先加载应用程序的配置文件,这对我来说似乎有点奇怪......
是否有一种简单的方法可以使请求指定应用程序,并且应用程序指定使用哪个框架,或者上述方式最简单?
对不起,如果这令人困惑!让我困惑的是写了一下;)
答案 0 :(得分:0)
我大部分时间都使用Symfony,所以在回答你的问题时我会在那里运用我的知识:
是否有一种简单的方法可以使请求指定应用程序
使用多个“index.php”(或使用?app=xxx
)和URL-rewrite组合。这让事情变得更清洁了。
此外,在加载框架文件之前必须加载应用程序的配置文件,这对我来说似乎有点奇怪......
这并不奇怪,你当然需要在引导框架之前配置和启动一些状态,但也许你可能想要提供框架引导类的子类,以定义在框架引导期间应该做什么。
我建议您查看Symfony2以了解它们如何模块化/管理库和依赖项。说真的,没有理由去编写另一个框架,但要为现有框架做出贡献 - 除非你发现它们与你的框架没有共享相同的愿景。