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

Php 首先是框架还是应用程序?动态框架和应用程序文件夹,php,model-view-controller,web-applications,frameworks,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)

好的,我正在用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
引导文件/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文件?)

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

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

抱歉,这让人困惑!写它让我有点困惑;)

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

有没有一种简单的方法可以让请求指定应用程序

通过组合使用多个“index.php”(或使用
?app=xxx
)。这让事情变得更干净了

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

这并不奇怪,在引导框架之前,您当然需要配置和启动一些状态,但您可能希望提供框架引导类的子类,以定义框架引导期间应执行的操作


我建议您深入研究它们是如何模块化/管理库和依赖项的。说真的,没有理由写另一个框架,而是对现有框架做出贡献——除非你发现它们与你的框架没有相同的愿景。

我看过Symphony,但我认为我对名称空间的了解不够,无法有效地遵循代码2。不过我会继续研究。多个“index.php”文件的问题在于,大量代码会被一次又一次地复制,任何微小的更改都需要在每个文件中复制。对不起,我不太明白你所说的我的引导类的子类定义在引导过程中应该做什么的意思。。你能详细说明一下吗?谢谢你的建议!而且我认为我还不够聪明,无法做出贡献;)看看Symfony的ProjectConfiguration。每个新项目都会有一个引导文件来扩展它。代码重复可以通过帮助程序和面向对象继承来消除:)好的,但假设我的AppConfiguration类必须扩展配置。如果在运行框架之前调用我的应用程序配置文件,AppConfiguration如何知道配置是什么?配置不是框架的/classes/dir中的一个类吗?这意味着它将根据应用程序希望运行的框架而变化…?开箱思考。应用程序配置/ProjectConfiguration/*配置可以是独立的库,也可以是框架的一小部分,在“启动框架”之前首先加载(顺便说一句,您编写的是PHP应用程序,而不是Java)。把这个想法抛在脑后,它阻碍了你的创造力。哈哈,好吧,我想我找到了自己的解决办法,所以我想现在一切都会好起来的。您所说的“您正在编写一个PHP应用程序,而不是Java”是什么意思?我知道他们在很多方面都不同,但我的评论中到底指的是什么?