【发布时间】:2011-06-15 11:31:40
【问题描述】:
它是什么
这是我到目前为止所做的:
-
核心/
- controllers/ (包含应用使用的控制器)
- models/ (包含应用使用的模型)
- views/ (包含应用使用的视图)
- base_controller.php (控制器每隔一个扩展)
- base_model.php (每隔一个扩展的模型)
-
供应商/
- phprouter/ (一个简单的路由器类)
- pimple/(一个简单的 DI 容器类)
- configuration.php (包含所有应用配置)
- index.php (包括配置、供应商、基本模型、基本控制器,设置 DI 容器并路由请求)
在此处查看代码:http://pastebin.com/pxUpUvv6
请注意,给定的代码只是一个示例,因此控制器、模型、视图还没有到位。此外,它可能是错误的(未经测试),但现在没关系。
请求流程
- 客户端请求index.php。
- 包括配置、供应商、基本控制器、基本型号。
- DI 容器和依赖项已初始化,我们现在可以将它们注入到任何地方。
- 我们将控制器映射到 URL,路由器完成它的工作。
- 控制器被获取(尽管这不在示例代码中,如上所述)。
- 我们做了一些事情。
- 然后该方法调用
::call_model(),其中包括来自core/models/的对应模型,然后从对应的模型类调用我们正在使用的相同方法。
- 模型已获取。
- 更多内容。
- 然后模型调用
::call_view()',其中包括来自core/views/的相应视图。
- 获取视图并将页面呈现给客户端。
仅供参考:对应
对应的控制器、模型、视图示例:
- 控制器
Controller_Products::list()在 core/controllers/Controller_Products.php - 模型
Model_Products::list()为 core/models/Model_Products.php - 查看 core/views/Model_Products_list.php
面临的问题
实际上,我对这种结构感到有些不舒服。不知道,它似乎远非可扩展、可模块化......
-
只有基本的文件夹结构——
core{, /controllers, /models/, /views},vendors在你看来不错吗? - 我觉得我应该在 index.php 之外获取
__autoload(),这对我来说似乎有点太大了。如果是,那么 DI 容器呢? - 也许如果我需要两个以上的外部库,最好不要手动将它们一个一个包含在内?但是怎么做?
- 将所有配置放在根目录下的 configuration.php 文件中,在我看来就像老式的 PHP4。感谢Pimple 的强大功能,我可以将这个配置直接嵌入其中,但是,在哪里?
- 我认为我处理
::call_model()(core/base_controller.php) 和::call_view()(core/base_model.php) 的方式有点尴尬。你会同意吗?重做整个事情的简化方法是什么? - 考虑到我的所有问题,最终我是否将框架用作 Symfony 会更好?
如果有不清楚的地方,请随时提问。
谢谢。
【问题讨论】:
-
你有没有考虑过使用像
Zend这样的MVC框架。 -
如果可能的话,也许你应该把问题分成几个问题。
-
我同意@Ozair Kafray,没有必要重新发明轮子。 Zend Framework 或 Symphony 都是很好的模块化 MVC 框架,已经为您解决了这些问题。
-
@Ozair Kafray @Adam Pointer 我确实在考虑使用框架,但我想先得到一些建议。 @Michael 好吧,不能真正拆分它,因为所有部分都是相关的,例如,这并不是说我在谈论一个流行的框架。 @yes123 抱歉,没有这么深的问题。
-
@seriousdev:查看以下 2 个 Stackoverflow 线程:
http://stackoverflow.com/questions/694929/whats-your-no-framework-php-framework和http://stackoverflow.com/questions/75882/what-in-your-mind-is-the-best-php-mvc-framework
标签: php model-view-controller directory-structure