php - 自动加载器应该放在 MVC 中的什么地方?

标签 php model-view-controller front-controller autoloader

我正在尝试构建一个简单的 MVC 框架以更好地理解某些概念。我认为首先要解决的重要问题是处理我的应用程序的所有请求的前端 Controller 。

一旦我开始考虑它,我就不确定加载我的应用程序将使用的类的最佳方法。我目前的想法是我的自动加载器应该位于前端 Controller 中,因为每个请求都会使用它。大多数框架通常把它放在哪里?查看一些已经构建的框架对我没有太大帮助,因为很多功能远远超出了我的需要,使它变得如此复杂以至于难以理解。

我尝试使用的类加载器可以在这里找到 https://gist.github.com/221634

只是想弄清楚如何适本地构建和组织一个简单的 MVC 框架。

最佳答案

你应该把它放在你的 Bootstrap 文件中。

这是你可以这样做的方法:

  1. 将每个 HTTP 请求强制发送到您的前端 Controller 、index.php、app.php 或您想如何调用它。
  2. Front Controller 可以定义框架中使用的一些常量,然后包含您的 Bootstrap.php 文件。 Bootstrap 将启动您的应用程序。
  3. 现在,我在 Bootstrap 中做的第一件事就是注册自动加载。这样我就可以很容易地得到\System\Router\Router 类,或者\System\Router\Dispatcher 类,你明白了。

还有一件事,您甚至可以使用 PSR0 类加载器注册您的应用程序模型文件夹。 因此,假设您的模型文件夹如下所示:

application/Models/
    - Entities
    - Services
        Email.php
        Cache.php

从你的 Controller 内部你可以很容易地得到像这样的模型

public function someController()
{
    $email = new \Models\Services\Email();
    // Do stuff with email service
}     

对您的问题的如此简短的回答是,最好的办法是首先为您提供一些“摆动”空间的前端 Controller ,然后从那里加载启动您的应用程序的 Bootstrap,Bootstrap 中的第一件事就是要求你的类加载器,并注册你想通过应用程序使用的库。

然后您甚至可以为您的应用程序 Controllers 和 Models 文件夹注册自动加载,并且在 Bootstrap 文件的末尾,当您要发送请求时,您可以像这样请求 Controller:

$app = new '\\Application\\Controllers\\' . $class;
// Dispatch request with call_user_func_array or ReflectionMethod and ReflectionClass

无需要求 Controller 类,因为它是自动加载的,只需为其提供正确的命名空间即可。

好问题,希望对您有所帮助!很高兴看到还有其他人在玩他们的客户 MVC :)

关于php - 自动加载器应该放在 MVC 中的什么地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12961422/

相关文章:

PHP Regex - 视频文件直接链接和 YouTube 链接

php - 如果单元格为空,则不会从数据库中获取电子邮件

objective-c - subview 与 childViewController

php - 如何为mvc crud网站创建动态更新功能

Java Servlets - 前端 Controller 问题(监听器和上下文)

php - 前端 Controller 模式 - 路由器是前端 Controller 吗?

php - Node.js 应用程序的服务器配置

javascript - Jquery tablesorter 插件试图禁用标题排序但它不工作

model-view-controller - Zend 框架技术

c# - 使用 IHttpAsyncHandler 高效转发 HTTP 请求