2016-01-06 80 views
0

我已经开始了一个新的laravel网站项目,并且我在理解MVC时遇到了一个障碍。我需要重构才能继续,但我不知道最好的方法。复杂页面的Laravel控制器

目前我有网页显示一个单一位逻辑的结果。即列出所有用户的页面,列出仅一个用户的详细信息的页面等等 - 全部由userController处理。这适用于由其他控制器处理的其他页面。

我创建了与我的数据库中的表格直接相关的模型,以及与模型相关的控制器。我将业务逻辑从控制器转移到了服务。控制器使用这些服务来执行业务逻辑和返回的数据,并将这些数据传递给视图。

这很好地将类似的功能组合在一起,工作正常。

userTable -> userModel -> userController -> userService 
clientTable -> clientModel -> clientController -> clientService 
... 

在我的路线,我有做相关功能使用相同的各控制器页,但根据页面所做的各个方法

/listallusers   -> [email protected]  -> userList.blade.php 

/listallclients  -> [email protected] -> clientList.blade.php 
/listdetailofoneclient -> [email protected] -> clientDetails.blade.php 

与做网页时,这是确定功能和(除了使用服务)似乎是laravel文档中暗示的。

不过,我开始用,要么真的不使用的功能来自任何巨资从多个服务(和数据需要的功能服务或网页的页面打交道时,弄不清楚控制器需要复杂的操作比如格式化等)。

  1. 一个基本的索引页。

什么控制器会处理这个问题?该索引可能链接到由现有控制器处理的路由,但除此之外可能不需要显示太多功能。这意味着控制器不需要将任何数据传递到视图上。你可能坚持逻辑返回路径文件中的视图,但是这是非常紧密耦合。

  • ,显示一个页面复杂的客户端用户数据
  • 您需要客户端数据用户数据传递到来自控制器的视图。但是从什么控制器?这是真的让我失望的部分。

    因为我的页面数量有限,但每页显示的逻辑很多,所以我想制作一个处理路由的page controller(或其他)。虽然我看了,但是在任何地方我都没有看到任何真正提及这个想法的事情,这让我觉得我要么在重新发明轮子,要么没有掌握laravel/MVC中的一些基本概念。

    本例中的页面控制器是否会处理全部的路由?它是否仅处理具有“重叠”现有控制器功能的页面和不属于现有控制器的页面?页面控制器是一个好主意吗?

    已经让我从这个问题

    • 质疑MVC做控制器需要的等效模型一些积分?
    • 控制器可以控制其他控制器以分离逻辑吗?

    回答

    4

    我会在这些问题中解决一些问题。

    1. 有一个PageControllerHomeController是非常可以接受的。控制器不必链接到特定模型,例如AuthController将处理登录和注销的逻辑,但不绑定到模型,或处理设置/重置密码的PasswordController或处理计费路由的PaymentController 。控制器只是一种在一个文件中组织相关路由逻辑的方法。静态的基本页面是相关的路线,所以PageController对我来说很有意义。

    2. 用户是否与特定客户绑定?如果是的话,你可以安排你的控制器以嵌套的方式让您拥有一个ClientControllerUserController和你的路由是这个样子:

      /clients/{client}/users //list all users for this client 
      
    3. 对于大量的数据格式化它可能最好使用一个服务提供商和使用依赖将其注入到需要使用它的控制器中。这使您可以从控制器中分离数据操作,以便在需要时将其更改。假设您正在使用软件制作图表,并且您希望稍后将其更改 - 您希望将格式逻辑从控制器中删除。

    我希望我能以某种方式提供帮助......这里有一串思路!