组织一个PHP项目 是什么

组织一个PHP项目 是什么,php,model-view-controller,directory-structure,Php,Model View Controller,Directory Structure,以下是我迄今为止所做的工作: 核心/ 控制器/(包含应用程序使用的控制器) 型号/(包含应用程序使用的型号) 视图/(包含应用程序使用的视图) base_controller.php(每隔扩展一次控制器) base_model.php(每隔扩展一次模型) 供应商/ phprouter/(一个简单的路由器类) pimple/(一个简单的DI容器类) php(包含所有应用程序配置) php(包括配置、供应商、基本模型、基本控制器、设置DI容器和路由请求) 请参见此处的代码: 请注意,给定

以下是我迄今为止所做的工作:

  • 核心/
    • 控制器/(包含应用程序使用的控制器)
    • 型号/(包含应用程序使用的型号)
    • 视图/(包含应用程序使用的视图)
    • base_controller.php(每隔扩展一次控制器)
    • base_model.php(每隔扩展一次模型)
  • 供应商/
    • phprouter/(一个简单的路由器类)
    • pimple/(一个简单的DI容器类)
  • php(包含所有应用程序配置)
  • php(包括配置、供应商、基本模型、基本控制器、设置DI容器和路由请求)
请参见此处的代码:
请注意,给定的代码只是一个示例,因此控制器、模型和视图尚未就位。此外,它可能是未经测试的,但现在这并不重要

请求流
  • 客户端请求index.php
  • 包括配置、供应商、基本控制器、基本模型
  • DI容器和依赖项已经初始化,我们现在可以将它们注入任何地方
  • 我们将控制器映射到URL,路由器完成它的工作
  • 将获取控制器(尽管示例代码中没有这一点,如上所述)。
    • 我们做一些事情
    • 然后该方法调用
      ::call_model()
      ,其中包括core/models/中相应的模型,然后从相应的模型类调用我们正在使用的相同方法
  • 模型已获取。
    • 更多的东西
    • 然后模型调用
      ::call_view()
      ”,其中包括core/views/中相应的视图
  • 获取视图并将页面呈现给客户端
  • 供参考:对应 控制器、模型、视图的对应示例:

    • Controller
      Controller\u Products::list()
      位于core/controllers/Controller\u Products.php
    • Model
      Model\u Products::list()
      作为核心/models/Model\u Products.php
    • 查看核心/views/Model_Products_list.php
    面临的问题 事实上,我对这种结构感到有点不舒服。不知道,它似乎远不是可伸缩的、可模块化的

  • 只有根目录下的基本文件夹结构--
    core{,/controllers,/models/,/views}
    vendors
    看起来不错吗
  • 我觉得我应该得到index.php之外的
    \uu autoload()
    ,这对我来说似乎有点太大了。如果是,那么DI容器呢
  • 如果我需要两个以上的外部库,最好不要手动一个接一个地包含它们?但是怎么做呢
  • 在我看来,将所有配置放在根目录下的configuration.php文件中就像老式的PHP4。由于的强大功能,我可以将此配置直接嵌入其中,但是,在哪里
  • 我认为我处理
    ::call_model()
    (core/base_controller.php)和
    ::call_view()
    (core/base_model.php)的方式有点笨拙。你同意吗?重做整件事的简化方法是什么
  • 考虑到我所有的问题,使用Symfony框架最终会更好吗
  • 如果有不清楚的地方,请随时询问。
    谢谢

  • 您可以同时使用自动加载和DI容器,自动加载如何与命名约定一起使用。我建议使用spl_自动加载
  • 使用自动加载,您可以删除所有(或几乎所有)包含
  • 我猜是在index.php中
  • 是的,走错了路。首先,尽量不要使用静态方法。此外,模型应该有具有描述性名称的方法,而不仅仅是“给我打电话,我会尽我所能”。这是一个更复杂的问题——您需要了解控制器和模型应该如何进行协作。作为变体,读一些书。控制器应该调用模型的方法,以获取某些情况下的数据。模型它不仅仅是控制器代码的地方。不同的控制器可以使用不同的模型。模型也可以使用其他模型
  • 这个问题的答案不能是客观的:)

  • 您是否考虑过使用MVC框架,如
    Zend
    。如果可能,您应该将问题分解为几个问题。我同意@Ozair Kafray的观点,没有必要重新发明轮子。Zend框架或Symphony都是很好的模块化MVC框架,已经为您解决了这些问题。@Ozair Kafray@Adam Pointer我确实在考虑使用框架,但我想先提出一些建议@Michael,嗯,不能真的拆分它,因为所有的部分都是相关的,比如说,我说的不是一个流行的框架@yes123抱歉,这里没有这么深奥的问题。@seriousdev:看看下面两个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