我已经开始了一个新的laravel网站项目,我在理解MVC方面遇到了障碍。我需要重构才能继续,但我不知道最好的方法。
目前我的网页显示了一点逻辑的结果。即列出所有用户的页面,列出一个用户的详细信息的页面等等 - 全部由userController
处理。这适用于其他控制器处理的其他页面。
我创建了与数据库中的表直接相关的模型,以及与模型相关的控制器。我将业务逻辑从控制器转移到了服务。控制器使用服务来执行业务逻辑,并将返回的数据传递给视图。
这很好地将类似的功能组合在一起并且工作正常。
userTable -> userModel -> userController -> userService
clientTable -> clientModel -> clientController -> clientService
...
在我的路线中,我有相关功能的页面使用相同的控制器,但个别方法取决于页面的作用
/listallusers -> userController@list -> userList.blade.php
/listallclients -> clientContoller@list -> clientList.blade.php
/listdetailofoneclient -> clientContoller@details -> clientDetails.blade.php
在处理执行该功能的页面时(除了使用服务之外)这似乎是laravel文档中暗示的内容。
然而,当我处理那些并非真正使用来自任何需要多重功能的服务或网页功能的网页时,我开始对控制器感到困惑服务(以及数据需要复杂的操作,如格式化等)。
什么控制器会处理这个?索引可能链接到由现有控制器处理的路由,但它可能不需要显示除此之外的许多功能。这意味着控制器不需要将任何数据传递给视图。您可以坚持逻辑以返回路径文件中的视图,但这是非常紧密耦合的。
您需要将客户端数据和用户数据传递给控制器的视图。但是从哪个控制器?这是真正阻碍我的部分。
因为我的页面数量有限但每页都有很多逻辑显示,所以我想要制作一个page controller
(或其他东西)来处理路由。虽然我看过,但我没有看到任何真正提到这个想法的地方,这让我觉得我要么重新发明轮子,要么没有掌握laravel / MVC中的一些基本概念。
在这种情况下,页面控制器是否会处理 all 路由?它只会处理“重叠”的页面吗?现有的控制器功能和不属于现有控制器的页面?页面控制器是一个好主意吗?
还有一些问题让我对这个问题提出质疑MVC
答案 0 :(得分:4)
我会考虑几个问题。
拥有PageController
或HomeController
是非常可以接受的。控制器不必链接到特定模型,例如AuthController
将处理登录和退出逻辑但不依赖于模型,或PasswordController
处理设置/重置密码,或处理结算路线的PaymentController
。控制器只是在一个文件中组织相关路由的逻辑的一种方法。静态基本页面是相关路线,因此PageController
对我有意义。
用户是否与特定客户绑定?如果是这样,您可以以嵌套方式排列控制器,这样您就拥有ClientController
和UserController
,并且您的路线看起来像这样:
/clients/{client}/users //list all users for this client
对于大量数据格式化,最好使用服务提供程序并使用依赖注入将其注入需要使用它的控制器中。这允许您从控制器中分离数据操作,以便在需要时将其更改。假设您正在使用软件制作图表,并且您希望稍后将其更改 - 您希望从控制器中删除该格式化逻辑。
我希望我能以某种方式帮助......在这里有点思路!