PHP MVC框架的文件夹结构......我这样做了吗?

man*_*pig 7 php model-view-controller module directory-structure

我目前正在开发自己的PHP框架,我需要一些帮助来确定我是否正朝着正确的方向前进......

该框架既可供我自己使用,也可以进一步提升我的PHP技能.我遇到了很多问题,通过克服它们,我学到了很多东西,并且喜欢能够从零开始创造一些东西,所以我宁愿看不到像"Just use Zend"这样的答案!;)

我已经阅读了Stack Overflow和其他一些网站上的一些文章,但是我无法得到我需要的正确答案,所以希望有人可以给我一些有用的建议!

我已经尝试了一些不同的解决方案,但我最终让自己感到困惑,我不确定现在要走哪条路!我不能完全理解这一切......

'理论'框架结构

- .htaccess
- index.php
- private/
    - app/
        - bootstrap.php
        - modules/
            - default/
                - controllers/
                    - pages.php
                    - index.php
                - models/
                - views/
            - admin/
                - controllers/
                - models/
                - views/
    - config/
        - config.php
        - autoloader.php
    - lib/
        - Some_Library
            - Class1
                - class1.php
            - Class2
                - class2.php
- public/
    - css
    - images
    - scripts
Run Code Online (Sandbox Code Playgroud)

细节

  • index.php是主文件,其中每个请求都被路由到.htaccess.
  • 私人/显然无法公开访问.
  • public /包含所有公共文件.
  • app /包含所有应用专用代码.
  • lib /可以包含Zend或其他库(我也在自己工作),用自动加载器调用
  • bootstrap.php是特定于应用程序的代码...... 我需要这个吗?主要的'index.php'够吗?.
  • modules /将包含每个模块...... 我是否需要模块?.
  • default /是默认模块,它将包含大多数请求的MVC(当'admin'不是URL的第一部分时使用).
  • admin /是将包含管理部分的MVC的模块.

无论如何,对我的问题......

我认为将管理部分与网站的其他部分分开会更好,但这就是我陷入困境的地方.我已经使上述结构与它一起工作,但我不确定这是否是最有效的方法.

如果请求site.com/videos/view/1/来到我的网站..

模块:默认 控制器:视频 操作:查看 参数:数组('1')

如果请求site.com/admin/pages/view/1/来到我的网站..

模块:管理员 控制器:页面 操作:查看 参数:数组('1')

这是正确的方法吗?或者我是否过度复杂并做了一些不值得做的事情?

我的管理部分应该有一个完全独立的应用程序框架吗?我是否甚至需要将管理部分的MVC与其余部分分开?

很抱歉这个大问题,只是想给你尽可能多的信息!随意回答你可以选择哪一部分= P.

Mon*_*lon 2

管理路由的一种解决方案是 CakePHP 所做的,首先定义管理字符串的配置,然后在控制器中使用具有特定命名转换的操作

//Configuration ============================
Configure::write("admin_routing" , true );
Configure::write("admin_prefix"  , "admin" );

//Controller ===============================
class MyController extends AppController{

    function index(){
      //Will map to /mycontroller/
    }


    function admin_index(){
      //Will map to /admin/mycontroller/
    }

}
Run Code Online (Sandbox Code Playgroud)

您可以通过使用路由系统来概括这一点,只需看看您最喜欢的框架是如何做到的

另一个注意事项

  1. 模块文件夹似乎是不必要的
  2. 我同意 antpaw 的观点,您应该添加全局视图和模型文件夹,以便在应用程序之间共享它们
  3. 我不明白为什么自动加载器位于 config 目录内而不是作为 lib 目录的一部分,您也可以将 boostrap.php 移动到 config 目录

希望这可以帮助