我想要建立一个简单的MVC框架,以更好地了解一些概念。 我认为将是解决重要的第一件事就是前端控制器处理所有对我的应用程序的请求。
一旦我开始想,我不知道的加载,我的应用程序将使用这些类的最佳方式。 我现在的思维过程是自动加载我应位于前端控制器,因为每个请求使用它。 哪里最框架通常把这个? 翻翻几个已建成框架的很多功能远远超过我所需要的,复杂的问题,因此,很难理解没有帮助我很多。
我想使用的类加载器可以在这里找到https://gist.github.com/221634
只是想弄清楚如何适当地建立和组织一个简单的MVC框架。
你应该把它放在你的引导文件。
这是你如何能做到这一点:
- 无论你怎么称呼它迫使每个HTTP请求到前端控制器的index.php,app.php或怎么样。
- 前端控制器可以定义在框架中使用的一些常量,然后包括你的bootstrap.php文件。 引导将引导您的应用程序。
- 现在,在我的引导做的第一件事就是注册自动加载。 这样我就可以轻松搞定\ SYSTEM \路由器\ Router类,或\ SYSTEM \路由器\ Dispatcher类,你明白了吧。
还有一件事,你甚至可以注册PSR0类加载器的应用模型文件夹中。 因此,可以说,你的模型文件夹看起来是这样的:
application/Models/
- Entities
- Services
Email.php
Cache.php
从你的控制器内,你可以很容易地得到这样的模型
public function someController()
{
$email = new \Models\Services\Email();
// Do stuff with email service
}
因此,简短的回答你的问题是,拥有最好的办法是先前端控制器给你一些“摆动”的房间,然后从那里您加载引导该启动后您的应用程序,并在引导第一件事情是需要你的类加载器,并注册库,你想通过应用程序使用。
然后,你甚至可以注册自动加载的应用程序控制器和模型的文件夹,并在系统启动文件的末尾,当你即将派遣要求,您可以要求控制器是这样的:
$app = new '\\Application\\Controllers\\' . $class;
// Dispatch request with call_user_func_array or ReflectionMethod and ReflectionClass
无需要求Controller类因为它的自动加载,只是为它提供正确的命名空间。
大的问题,希望这有助于! 很高兴看到有其他人与他们的custome MVC玩弄:)
当然在引导阶段!
自动加载机应该是每一个PHP应用程序的一部分,它应该是(之一)初始化第一类/代码。
我的MVC初始化步骤:
- 指数的切入点
- 引导初始化错误处理,自动加载机和国际奥委会
- 应用程序,主要是一个MVC应用程序
- 路由机制
- 调节器
- 模型
- 视图
那么,这个问题:“它在哪里去了?” 我提出两种更精确的问题:
- 哪里文件存储在包含自动加载函数/类的定义?
- 凡在您的要求调度周期应该是被实例化,配置,并允许做它的魔力?
第一个问题 - “在哪里包含类文件什么地方呢?” - 既然你已经确定要使用的自动加载类可能是不适合你这样的关键。 确切的答案取决于你自己的应用程序框架结构,但对于外部开发的类一样,你举,某处一中lib
或vendor
的目录或许是有道理的。
对于第二个问题 - “在哪里?初始化,配置等” - 答案是:尽可能早地在请求周期,这样你就可以自动加载的好处对于那些后来引用的所有类。 在实际应用中,这可能意味着在某个地方你的引导过程。
当然,这通常意味着以加载磁带自动加载类,你可能会做手工require
/ include
电话,实例化你的自动加载的对象,并与命名空间和路径进行配置。