57. 路由 基本路由

  • 简单优雅的定义路由的方法:
Route::get('foo', function () {
    return 'Hello World';
});
  • 所有的 Laravel 路由都在 routes 目录中的路由文件中定义,这些文件都由框架自动加载。

  • routes/web.php 文件用于定义 web 界面的路由。这里面的路由都会被分配给 web 中间件组,它提供了会话状态和 CSRF 保护等功能。

  • 定义在 routes/api.php 中的路由都是无状态的,并且被分配了 api 中间件组。

  • 大多数的应用构建,都是以在 routes/web.php 文件定义路由开始的。

  • routes/api.php 文件中定义的路由通过 RouteServiceProvider 被嵌套到一个路由组里面。

  • 路由器允许你注册能响应任何 HTTP 请求的路由:

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
  • GET 获取资源
  • POST 创建资源
  • PUT 编辑/更新资源(需提交完整的资源字段)
  • PATCH 编辑/更新资源(可以提交需要更新的字段)
  • DELETE 删除资源
  • OPTIONS 服务器允许哪些请求谓词

这些就是最近比较流行的RestFul模式常用的,另HTML表单只支持POST、GET两种请求方式,PUT、PATCH以及DELETE是Laravel中伪造的HTTP请求方式,需要在表单中添加才能生效,还要配置路由。

patch方法用来更新局部资源,这句话我们该如何理解?
.
假设我们有一个UserInfo,里面有userId, userName, userGender等10个字段。可你的编辑功能因为需求,在某个特别的页面里只能修改userName,这时候的更新怎么做?
.
人们通常(为徒省事)把一个包含了修改后userName的完整userInfo对象传给后端,做完整更新。但仔细想想,这种做法感觉有点二,而且真心浪费带宽(纯技术上讲,你不关心带宽那是你土豪)。
.
于是patch诞生,只传一个userName到指定资源去,表示该请求是一个局部更新,后端仅更新接收到的字段。
.
而put虽然也是更新资源,但要求前端提供的一定是一个完整的资源对象,理论上说,如果你用了put,但却没有提供完整的UserInfo,那么缺了的那些字段应该被清空。
.
补充:
.
最后再补充一句,restful只是标准,标准的意思是如果在大家都依此行事的话,沟通成本会很低,开发效率就高。但并非强制(也没人强制得了),所以你说在你的程序里把方法名从put改成patch没有任何影响,那是自然,因为你的后端程序并没有按照标准对两个方法做不同处理,她的表现自然是一样的。

  • 你可以使用 match 方法,也可以使用 any 方法注册一个实现响应所有 HTTP 请求的路由:
Route::match(['get', 'post'], '/', function () {
    //
});

Route::any('foo', function () {
    //
});
  • 指向 web 路由文件中定义的 POST、PUT 或 DELETE 路由的任何 HTML 表单都应该包含一个 CSRF 令牌字段,否则,这个请求将会被拒绝。
{{ csrf_field() }} ...
  • 如果要定义重定向到另一个 URI 的路由,可以使用 Route::redirect 方法。

Route::redirect('/here', '/there', 301);

  • 如果你的路由只需要返回一个视图,可以使用 Route::view 方法。

    view 方法有三个参数,其中前两个是必填参数,分别是 URL 和视图名称。第三个参数选填,可以传入一个数组,数组中的数据会被传递给视图。

Route::view('/welcome', 'welcome');

Route::view('/welcome', 'welcome', ['name' => 'Taylor']);

你可能感兴趣的:(57. 路由 基本路由)