【问题标题】:How do I route to a controller action when I'm in a routing closure in Laravel 5.2当我在 Laravel 5.2 中的路由闭包中时,如何路由到控制器操作
【发布时间】:2016-12-01 23:11:14
【问题描述】:

如果我输入domain/something/someaction/10,我将使用以下路由规则来捕获它:

Route::get('/{resource}/someaction/{id}', function($resource,$id){
    //do something
});

现在,在这个闭包中,我想将此请求转发给控制器的操作。但它可以是任何东西,例如:

$controller_name = transformThisResource($resource).'Controller';
$controller = new $controller_name;
$controller->someaction($id);

我遇到的特殊问题是该项目中有大约 30 个控制器,并且每个控制器中的 3 个动作执行的 3 个任务的行为完全相同。使用如上所述的功能,我的路由文件中只需要 3 条规则。

【问题讨论】:

    标签: php laravel laravel-5 laravel-routing


    【解决方案1】:

    我认为从另一个控制器的方法调用一个控制器的方法没有多大意义。

    我认为您的 transformThisResource() 方法实际上应该返回一个重定向路径。例如,假设当您的用户访问domain/something/someaction/10(位于控制器A内)时,您想要执行一些位于另一个控制器方法(以下简称控制器B)内的代码 strong> 响应 URI /the/right/controller/method{resource}/right/controller/{id}。在这种情况下,我会做的是从 controller A 返回一个重定向:

    public function controllerADefaultResponder($resource, $id)
    {
        return redirect(mapToUri($resource, $id));
    }
    

    上述代码可能会重定向到/the/right/controller/method?resource=domain/something&id=10domain/something/right/controller/10 等链接。这两个链接之间的唯一区别是您如何选择在请求之间传递数据。一种是使用路由参数,另一种是使用 GET 参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-20
      • 2014-08-26
      • 2023-03-27
      • 2013-11-15
      • 2012-08-01
      • 1970-01-01
      相关资源
      最近更新 更多