资讯专栏INFORMATION COLUMN

Laravel 获取 Route Parameters (路由参数) 的 5 种方法

seasonley / 1212人阅读

摘要:获取路由参数的方式有很多,并且有个小坑,汇总如下。例如结果为结果为以上就是获取路由参数的种方法。所有文章均已收录至项目。

Laravel 获取路由参数的方式有很多,并且有个小坑,汇总如下。

假设我们设置了一个路由参数:
/**
* 定义路由参数名称分别为: param1,param2
*/
Route::get("/{param1}/{param2}", "TestController@index");
现在我们访问 http://test.dev/1/2 TestController 中:
/**
* 路由参数获取方法
*
* @param IlluminateHttpRequest $request    依赖注入 Request 实例,放在参数中什么位置都可以自动加载
* @param mixed $arg2    要获取的路由参数
* @param mixed $arg1    要获取的路由参数
*/

public function index(Request $request, $arg2, $arg1)
{

    /**
    * 方法一:按照 URL 中路由参数先后顺序来获取
    * 注意:此种方式有个小坑,获取的值只与顺序有关,与名称无关
    */
    echo $arg2;    //结果为 1 ,因为 $arg2 在第一位,获取的是第一个路由参数 param1 的值
    echo $arg1;    //结果为 2 ,因为 $arg1 在第二位,获取的是第二个路由参数 param2 的值

    /**
    * 方法二:按照路由参数名称来获取
    * 注意:此处名称是 Route 中定义的参数名,非上面方法中的参数名 
    */
    $request->route("param1");      //结果为 1 ,获取的是第一个路由参数
    $request->route("param2");      //结果为 2 ,获取的是第二个路由参数

    /**
    * 方法三:使用 request() 辅助函数来获取,效果同方法二
    */
    request()->route("param1");     //结果为 1 ,如果不带路由参数名则返回当前的Route对象
    request()->route("param2");     //结果为 2 ,如果不带路由参数名则返回当前的Route对象

    /**
    * 方法四:使用 Route Facade
    */
    Route::input("param1");     //结果为 1 ,该方法必须带路由参数名
    Route::input("param2");     //结果为 2 ,该方法必须带路由参数名

    /**
    * 方法五:使用 IlluminateHttpRequest 实例动态属性
    */
    $request->param1;   //结果为 1 ,Laravel 5.4+ 可用
    $request->param2;   //结果为 2 ,Laravel 5.4+ 可用
        
    // 或者
    request()->param1;   //结果为 1 ,Laravel 5.4+ 可用
    request()->param2;   //结果为 2 ,Laravel 5.4+ 可用
        
    //或者
    request("param1");   //结果为 1 ,Laravel 5.4+ 可用
    request("param2");   //结果为 2 ,Laravel 5.4+ 可用
        
    /**
    * 注意:Laravel 在处理动态属性的优先级是,先从请求的数据(POST/GET)中查找,没有的话再到路由参数中找。
    * 例如:URL : http://test.dev/1/2?param1=a¶m2=b
    * $request->param1; request()->param1; request("param1");    //结果为 a
    * $request->param2; request()->param2; request("param2");    //结果为 b
    */
}

以上就是 Laravel 获取路由参数的 5 种方法。

原创。 所有 Laravel 文章均已收录至 laravel-tips 项目。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25936.html

相关文章

  • Laravel核心解读--控制器

    摘要:下面是刚才说的这些步骤对应的核心代码收集路由和控制器里应用的中间件我们在前面的文章里已经详细的解释过中间件和路由的原理了,接下来就看看当请求最终找到了路由对应的控制器方法后是如何为控制器方法注入正确的参数并调用控制器方法的。 控制器 控制器能够将相关的请求处理逻辑组成一个单独的类, 通过前面的路由和中间件两个章节我们多次强调Laravel应用的请求在进入应用后首现会通过Http Ker...

    fxp 评论0 收藏0
  • Laravel 路由执行

    摘要:路由执行代码展示控制器形式匿名函数形式控制器形式处理控制器参数解析返回过滤的从路径或主机名解析出来的对应的参数数组,类似方式调用控制器的方法可以有自己的区别于路由参数的 Laravel 路由执行 代码展示 protected function runRouteWithinStack(Route $route, Request $request) { $shouldSkipMid...

    luoyibu 评论0 收藏0
  • Laravel 依赖注入源码解析

    在 Laravel 的控制器的构造方法或者成员方法,都可以通过类型约束的方式使用依赖注入,如: public function store(Request $request) { //TODO } 这里 $request 参数就使用了类型约束,Request 是类型约束的类型,它是一个类:IlluminateHttpRequest. 本文研究 Laravel 的依赖注入原理,为什么这样定义...

    Donne 评论0 收藏0
  • Laravel 路由设置

    摘要:本质是将为的请求转化为追加的组内请求,对应的匿名函数依然是为的请求假如为,则返回优先从设置里面取值,没有则生成单数形式的字符串,并将字符替换为小结资源类型的构造,实际上会被转化为构造多个默认资源的路由,本质依然是基本构造 Laravel 路由 路由构造总览 构造方法有: Route::get、Route::post、Route::put、Route::patch、Route::del...

    张红新 评论0 收藏0
  • Laravel核心解读--中间件(Middleware)

    摘要:解析出后将进入应用的请求对象传递给的方法,在方法负责处理流入应用的请求对象并返回响应对象。携带了本次迭代的值。通过这种方式让请求对象依次流过了要通过的中间件,达到目的地的方法。 中间件(Middleware)在Laravel中起着过滤进入应用的HTTP请求对象(Request)和完善离开应用的HTTP响应对象(Reponse)的作用, 而且可以通过应用多个中间件来层层过滤请求、逐步完善...

    enda 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<