laravel将请求分派到另一个路由

参考laravel手册 https://laravel.com/api/5.7/Illuminate/Routing/Router.html

最近有个业务场景是这样:

//在管理模块中,要根据模块名动态跳转到该模块的controller来执行configs方法
//有类似如下两条路由
Route::get('manage/{module}', 'Common\\ManageController@configs');
Route::get('module1/config', 'Common\\Module1Controller@configs')->name('articles.configs');

访问A路由,要动态的跳转B路由,即

Class ManageController
{

    ...

    public function configs($module)
    {
        return redirect()->route("$module.configs");
    }
}

Class Module1Controller
{

    ...

    public function configs(Request $request)
    {
        // do something
    }
}

但这样会有302重定向,本来想通过nginx的location + rewrite来重写地址,来取出302的跳转。后来想了想觉得laravel这么优雅肯定有相关函数可以用。

于是查阅了learnku的laravel文档,但没有找到,google查阅前几页也没有提到解决方案,然后自己查了查laravel原始文档,发现Router类提供了responseWithRoute方法,于是将Controller修改如下:

Class ManageController
{

    ...

    public function configs($module)
    {
        request()->merge(['module' => $module]); //将参数值添加到request中
        return Route::respondWithRoute("$module.configs");
    }
}

更多可用方法可进一步查阅文档。

特此记个笔记,希望对同学们有帮助~


 上一篇
让页面中的http请求转为https请求 让页面中的http请求转为https请求
由于项目业务升级,网站升级https协议。 在 HTTPS 承载的页面上不允许出现 http 请求,一旦出现就是提示或报错: Mixed Content: The page at 'https://www.example.com&#
2019-07-05
下一篇 
laravel5.7安装jwt-auth的正确方法完整流程 laravel5.7安装jwt-auth的正确方法完整流程
由于没有完整的Laravel 5.7与jwt-auth集成的指南,官网的文档陈旧不更新,所以我决定创建一个。我假设你有一个Laravel支持auth的项目。 安装包jwt-auth将包添加到composer.json "require":
2019-06-11
  目录