将更大的Laravel 5项目分解为模块的正确方法是什么?

时间:2015-03-14 11:40:58

标签: php laravel module laravel-5

我正在使用Laravel 5开发一个PHP项目,我正在考虑为它设置一个不同的文件夹结构。

标准的Laravel文件夹结构如下:

/app
   /commands
   /Http
      /Controllers
      /Middleware
      Kernel.php
      routes.php
   /Providers
   Model.php
/config
/resources
etc...

但是,当项目变得更大并且你有很多控制器/存储库/模型等时。这种结构会破裂。

例如:如果您需要挖掘路线,查找哪个控制器负责,在大量控制器中找到该控制器,找出它的作用,找到管理面板中的错误并不是很容易找到在其他大文件夹中的其他可能负责的类,等等。简而言之:这是一团糟。

我一直在寻找将结构分解为模块的方法。我想出办法,但我不确定这是不是一个好方法。

我会为每个功能创建一个文件夹并将所有相关代码放在一起。例如:

/app
   /Admin
      /Controllers
      /Requests
      /Models 
      routes.php
   /Products
      /Controllers
      /Requests
      /Models
      routes.php

等。 (你明白了)

我不必从标准的RouteServiceProvider.php初始化1路由器,而是必须为每个模块编写一个ServiceProvider,并从那里开始所有单独的路由。所以在这种情况下,我会有一个AdminServiceProvider和一个ProductServiceProvider,每个都需要在自己的子目录中使用routes.php文件(以及它们自己的控制器命名空间)。

这似乎解决了我的情况,但我想知道我是否会遇到这种设置的麻烦。我在网上找到的所有例子都坚持标准结构。任何人都能告诉我这是否是一个体面的方式吗?或者有没有人有另一种方法可以做到这一点?

2 个答案:

答案 0 :(得分:6)

这是你建议的好方法,但没有必要自己做。目前我正在开发一个使用模块的L5项目 - 每个项目都有存储库,模型,自己的路径文件等目录。我正在使用Caffeinated module

答案 1 :(得分:4)

我也相信结构看起来不错。我还要添加一个额外的,核心或基本文件夹,它将包含基类和可重用的组件,以确保您在单独的“模块”中没有代码重复