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

PHP MVC框架的文件夹结构。。。我这样做对吗?,php,model-view-controller,module,directory-structure,Php,Model View Controller,Module,Directory Structure,我目前正在开发我自己的PHP框架,我需要一些帮助来确定我的方向是否正确 这个框架是我自己使用的,也是为了进一步提高我的PHP技能。我遇到了许多问题,通过克服它们,我学到了很多,我喜欢从无到有地创造一些东西,所以我不想看到像使用Zend!这样的答案 我已经读了很多关于Stack Overflow和其他网站的文章,但是没有得到我需要的正确答案,所以希望有人能给我一些有用的建议 我尝试了一些不同的解决方案,但我只是把自己弄糊涂了,我不知道现在该往哪个方向走!我不能完全理解这一切 “理论”框架结构 细节

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

这个框架是我自己使用的,也是为了进一步提高我的PHP技能。我遇到了许多问题,通过克服它们,我学到了很多,我喜欢从无到有地创造一些东西,所以我不想看到像使用Zend!这样的答案

我已经读了很多关于Stack Overflow和其他网站的文章,但是没有得到我需要的正确答案,所以希望有人能给我一些有用的建议

我尝试了一些不同的解决方案,但我只是把自己弄糊涂了,我不知道现在该往哪个方向走!我不能完全理解这一切

“理论”框架结构

细节

php是主文件,每个请求都通过.htaccess路由到该文件。 显然,私有/不能公开访问。 public/包含所有公共文件。 app/包含所有特定于app的代码。 lib/可以包含Zend或另一个我也在自己工作的库,用Autoloader调用 php是特定于应用程序的代码。。。我需要这个吗?主“index.php”是否足够?。 模块/将包含每个模块。。。我需要模块吗?。 default/是默认模块,当“admin”不是URL的第一部分时,它将包含大多数请求的MVC。 admin/是包含admin部分的MVC的模块。 不管怎样,我的问题是

我认为最好将管理部分与网站的其他部分分开,但这正是我陷入困境的地方。我制作了上面的结构来处理它,但我不确定这是否是最有效的方法

如果请求site.com/videos/view/1/进入我的网站

模块:默认值 控制器:视频 行动:查看 参数:数组“1”

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

模块:管理员 控制器:页 行动:查看 参数:数组“1”

这样做对吗?还是我把事情复杂化了,做了一些不值得做的事情

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


抱歉问了这么多问题,我只是想给你尽可能多的信息!请随意回答您可以回答的任何部分=P

我建议您使用一个bootstrap.php来管理所有路由,这样您就不会遇到像我希望可以在我的管理模块中多嵌套一个文件夹这样的问题

我也不会使用模块,并将默认控制器保留在controller/dir中,而将admin控制器保留在controller/admin dir中。模型和视图也是如此


顺便说一句,不在应用程序的不同部分之间共享模型真的不聪明,它们在99%的情况下都是相同的。这就是mvc如此强大的原因。有时你甚至可以在前端和后端之间共享应用程序内部的一些视图部分

我建议您使用一个bootstrap.php来管理所有路由,这样您就不会遇到像我希望在我的管理模块中再嵌套一个文件夹这样的问题

我也不会使用模块,并将默认控制器保留在controller/dir中,而将admin控制器保留在controller/admin dir中。模型和视图也是如此


顺便说一句,不在应用程序的不同部分之间共享模型真的不聪明,它们在99%的情况下都是相同的。这就是mvc如此强大的原因。有时你甚至可以在前端和后端之间共享应用程序内部的一些视图部分

管理路由的一个解决方案是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/
    }

}
您可以通过使用路由系统来概括这一点 看看你最喜欢的框架是如何实现的

另一方面

“模块”文件夹似乎不必要 我同意antpaw的观点,您应该添加一个全局视图和模型文件夹,以便在应用程序之间共享它们 我不明白为什么autoloader在config目录中,而不是作为lib目录的一部分,您也可以将boostrap.php移到config目录中
希望这有帮助

一个管理路由解决方案就是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/
    }

}
您可以通过使用路由系统来概括这一点 看看你最喜欢的框架是如何实现的

另一方面

“模块”文件夹似乎不必要 我同意antpaw的观点,您应该添加一个全局视图和模型文件夹,以便在应用程序之间共享它们 我不明白为什么autoloader在config目录中,而不是作为一部分 对于lib目录,您也可以将boostrap.php移动到config目录
希望这有帮助

我知道很久以前有人问过这个问题,但几天前我的情况完全一样

奇怪的是,提问者提出的解决方案基本上就是我所赞同的。基本上,我从ASP.NET MVC2中借用了一个称为区域的概念。区域是站点中有自己的控制器和视图模型的部分,但我不知道为什么。。。模型通常应该是通用的。这和你最初的想法非常相似

在任何情况下,遵循他们的文件夹+路由结构对于我的应用程序管理类型区域、用户区域以及介于两者之间的另一个级别都非常有意义。看看它,你可能会在那里发现一些成功

我的路线只考虑了区域。路由是硬编码的,所以如果我需要另一个区域,我只需调整路由文件。另外,如果指定$area,我的自动加载器将设置为在区域文件夹中查找

/admin/team/add/读作,区域:admin,控制器:team,操作:add

鉴于

/团队/添加/将改为,区域:[无],控制器:团队,操作:添加

文件夹结构有点像这样:

app/
   areas/
      admin/
          controllers/
          views/
      staff/
          controllers/
          views/
   controllers/
   models/
   views/

我知道这个问题很久以前就被问到了,但几天前我的情况还是完全一样的

奇怪的是,提问者提出的解决方案基本上就是我所赞同的。基本上,我从ASP.NET MVC2中借用了一个称为区域的概念。区域是站点中有自己的控制器和视图模型的部分,但我不知道为什么。。。模型通常应该是通用的。这和你最初的想法非常相似

在任何情况下,遵循他们的文件夹+路由结构对于我的应用程序管理类型区域、用户区域以及介于两者之间的另一个级别都非常有意义。看看它,你可能会在那里发现一些成功

我的路线只考虑了区域。路由是硬编码的,所以如果我需要另一个区域,我只需调整路由文件。另外,如果指定$area,我的自动加载器将设置为在区域文件夹中查找

/admin/team/add/读作,区域:admin,控制器:team,操作:add

鉴于

/团队/添加/将改为,区域:[无],控制器:团队,操作:添加

文件夹结构有点像这样:

app/
   areas/
      admin/
          controllers/
          views/
      staff/
          controllers/
          views/
   controllers/
   models/
   views/

我创建了一个Router类,它将接受某种类型的“reroute”变量/数组,可能是字符串形式的。该变量类似于admin,如果该模式在URL中匹配,路由器将配置自己从“admin/”文件夹加载控制器。在我把事情弄清楚之后,我会想出更有效的方法。。模块已经废弃,我明白为什么不需要它们了=我现在将分享模型和一些视图,我现在可以看到这更有意义了!谢谢我创建了一个Router类,它将接受某种类型的“reroute”变量/数组,可能是字符串形式的。该变量类似于admin,如果该模式在URL中匹配,路由器将配置自己从“admin/”文件夹加载控制器。在我把事情弄清楚之后,我会想出更有效的方法。。模块已经废弃,我明白为什么不需要它们了=我现在将分享模型和一些视图,我现在可以看到这更有意义了!谢谢我已经将上面展示的CakePHP解决方案合并到我当前的代码中,只做了一些更改。我没有在同一个控制器中同时执行默认和“admin”请求的操作,而是在controllers/indexController.php中有一个Index\u控制器,在controllers/admin/indexController.php中有一个admin\u Index\u控制器。我认为这个解决方案会起作用,除非你发现它有什么问题。。?关于2:你的意思是我应该在应用程序目录外添加“视图”和“模型”文件夹吗?或者只添加一个“视图/公共”目录和“模型/公共”目录?快速提问。。MyController类是否调用其他控制器??如果我的路由类看到我对antpaw答案的评论,可以配置要运行的控制器/操作,那么MyController类是否有必要?我不太明白你为什么要启动一个控制器-只是-启动其他控制器。。但也许我只是对MVC或蛋糕了解不够。管理员索引控制器似乎是一个合理的解决方案。它的好处是将管理逻辑分为两个不同的类。2.我不完全理解你所说的调用其他控制器的意思,它只是控制器,路由系统查看url并将其映射到这个类。admin_index函数只是一个常规操作背后的代码,只是路由有点不同。而不是/mycontroller/admin_index/它将映射到/admin/mycontroller/index/因为配置,我想我弄糊涂了,它说这将映射到哪里。。。我认为这些操作将从这些文件夹加载控制器,但我认为这只是意味着这些操作是由这些URL调用的,而不是那样
他们叫他们…对吗?我想我想有一个完全不同的类和结构,以正常的管理控制器等。用户/通过引导中的路由器将路由添加到controllers/userscocontroller.php users\u controller->add and admin/users/add routes to controllers/admin/userscocontroller.php或admin/controllers/userscocontrollers.php??管理员\用户\控制器->添加。想法?抱歉,忽略括号中链接上的s!我已经将上面展示的CakePHP解决方案合并到我当前的代码中,只做了一些更改。我没有在同一个控制器中同时执行默认和“admin”请求的操作,而是在controllers/indexController.php中有一个Index\u控制器,在controllers/admin/indexController.php中有一个admin\u Index\u控制器。我认为这个解决方案会起作用,除非你发现它有什么问题。。?关于2:你的意思是我应该在应用程序目录外添加“视图”和“模型”文件夹吗?或者只添加一个“视图/公共”目录和“模型/公共”目录?快速提问。。MyController类是否调用其他控制器??如果我的路由类看到我对antpaw答案的评论,可以配置要运行的控制器/操作,那么MyController类是否有必要?我不太明白你为什么要启动一个控制器-只是-启动其他控制器。。但也许我只是对MVC或蛋糕了解不够。管理员索引控制器似乎是一个合理的解决方案。它的好处是将管理逻辑分为两个不同的类。2.我不完全理解你所说的调用其他控制器的意思,它只是控制器,路由系统查看url并将其映射到这个类。admin_index函数只是一个常规操作背后的代码,只是路由有点不同。而不是/mycontroller/admin_index/它将映射到/admin/mycontroller/index/因为配置,我想我弄糊涂了,它说这将映射到哪里。。。认为这些操作将从这些文件夹加载控制器,但我认为这只是意味着这些操作是由这些URL调用的,而不是它们调用的..对吗?我想我想有一个完全不同的类和结构,以正常的管理控制器等。用户/通过引导中的路由器将路由添加到controllers/userscocontroller.php users\u controller->add and admin/users/add routes to controllers/admin/userscocontroller.php或admin/controllers/userscocontrollers.php??管理员\用户\控制器->添加。想法?抱歉,忽略括号中链接上的s+1我喜欢模型应该是通用的想法+1我喜欢模型应该是通用的想法提醒我symfony目录结构-让我想起symfony目录结构-