这里为什么使用闭包函数

为什么使用闭包函数喃? 而不是第二种直接调用喃 求大神解释一下 谢谢

Route::get('/users', function () {
    return Response::json([
        // ...
    ]);
});
Route::get('/users', Response::json([
        // ...
    ])
);
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

闭包里面可以包含其他逻辑, 灵活性好. 大概吧.如

Route::get('/users', function () {
    // 我还可以在这里做其他逻辑入口,比如放点检查用户权限的代码,或者 
    checkUser();
   // 记录日志
    log::info("users route". time());
    return Response::json([
        // ...
    ]);
});

而下面的就没有这种灵活性了,比如让你访问这个路由的时候,统计访问次数,下面的结构就不好实现了.

Route::get('/users', Response::json([
        // ...
    ])
);
2年前 评论
讨论数量: 9

\Illuminate\Routing\Route get(string $uri, array|string|callable|null $action = null)

2年前 评论

第一个是可调用的闭包,闭包里return了响应内容;
第二个传入的是个对象,既不能调用,也不能解析出控制器方法,虽然说它是个响应内容,但没人帮你 return
说白了就是按照文档来,这两种写法不是一回事。

2年前 评论

闭包里面可以包含其他逻辑, 灵活性好. 大概吧.如

Route::get('/users', function () {
    // 我还可以在这里做其他逻辑入口,比如放点检查用户权限的代码,或者 
    checkUser();
   // 记录日志
    log::info("users route". time());
    return Response::json([
        // ...
    ]);
});

而下面的就没有这种灵活性了,比如让你访问这个路由的时候,统计访问次数,下面的结构就不好实现了.

Route::get('/users', Response::json([
        // ...
    ])
);
2年前 评论

第二个参数原则上是解析控制器方法的,Response::json 返回是对象,直接传入也会报错

2年前 评论

话说。。第二个。。是不是。。注册路由的时候。。就要计算好数据了

2年前 评论
fatrbaby

因为注册路由时,路由对应的逻辑是不需要执行的。当路由匹配到了才会去执行对应路由注册的逻辑。闭包函数其实是个Closure对象,只有调用他的时候,闭包函数里面的代码才会被执行。

你第二种方法,其实是在注册路由时,就执行了全站的逻辑,就算代码跑得起来,也跑不动。

2年前 评论
thebestxt

这个地方要的是闭包,不是返回的对象。

2年前 评论

闭包不是马上被执行,需要满足调用条件时才被执行。(我猜的)

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!