【问题标题】:Calling Multiple Controller on a Route在路由上调用多个控制器
【发布时间】:2018-04-19 14:44:00
【问题描述】:

有疑问帮帮我,我在laravel有一个应用,想在同一个Route中调用多个Controller,可以吗?

这个方法我试过了,还是不行

$api->get('document', ['as' => 'system.api.manager.v1.document.listDoc1', 'shield' => ['system.manager.document.list'], 'any' => true, 'uses' => 'Doc1Controller@grid']);
$api->get('document', ['as' => 'system.api.manager.v1.document.listDoc2', 'shield' => ['system.manager.document.list'], 'any' => true, 'uses' => 'Doc2Controller@grid']);
$api->get('document', ['as' => 'system.api.manager.v1.document.listDoc3', 'shield' => ['system.manager.document.list'], 'any' => true, 'uses' => 'Doc3Controller@grid']);

【问题讨论】:

  • 你能发布这些方法吗?通常如果发生这种情况,您可以将控制器逻辑放在一个类中(多个方法)并创建一个新的控制器方法来调用这些方法
  • 这行不通,原因很明显。 Laravel 路由器根据您定义为 get 方法的第一个参数的路径匹配路由。由于您已经定义了与 document 相同的路径 3 次,因此您实际上每次都覆盖了先前的定义,因此您的代码只匹配最后一个并执行 Doc3Controller@grid。考虑到这一点,请考虑您正在尝试访问该 URL https://yourdomain.com/document。如果唯一的参考是/document,Laravel 路由器怎么知道你是想访问listDoc1listDoc2 还是listDoc3 路由。
  • @PH27 请提供更多关于您要实现的目标的背景信息,以便人们可以提供可行的方法来解决此问题。
  • 我是来留下反馈的,我要做我需要的,我在Repository中创建了一个函数来返回我需要在网格上显示的数据,所以我只调用了一个函数我的路由中的控制器,它调用我在存储库中创建的函数。谢谢各位。

标签: php laravel controller routes


【解决方案1】:

您可以使用继承。 将GreatController 定义为

的父级

"Doc1Controller, Doc2Controller, Doc3Controller"

然后将您的标准方法、函数移至GreatController。我正在这样做。你也可以在_construct()中定义所有相同的方法

【讨论】:

    【解决方案2】:

    您可以使用闭包代替直接的控制器调用。在那里你叫你的控制器

    【讨论】:

      猜你喜欢
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多