Laravel 的所有路由都定义在路由文件中,这些文件位于项目根目录的routes/目录下。
这些文件由应用程序的App\Providers\RouteServiceProvider服务自动加载。
routes/web.php文件定义了用于 Web 界面的路由,这些路由被分配给web中间件组,该组提供会话状态和 CSRF 保护等功能。
routes/api.php中的路由是无状态的,这些路由被分配给api中间件。

对于大多数应用程序,都是以在web.php文件定义路由开始的。可以通过在浏览器中输入定义的路由 URL 来访问 routes/web.php的路由,例如:

  1. use Illuminate\Support\Facades\Route;
  2. Route::get('/hello', function () {
  3. return 'Hello Laravel';
  4. });
  5. // 通过 http://example.com/hello 来进行访问上面定义的路由

routes/api.php文件中定义的路由通过 RouteServiceProvider被嵌套到一个路由组里。在这个路由组中,会自动添加 URL 前缀 /api 到此文件中的每个路由。也可以在 RouteServiceProvider 类中修改此前缀以及其他路由组选项

基础路由

最基本的 Laravel 路由接受一个 URL 和一个闭包函数,它提供了一种非常简单的方法来定义路由和行为,而不需要复杂的路由配置文件;

use Illuminate\Support\Facades\Route;

Route::get('/hello', function () {
  return 'Hellow Laravel';
})

可用的路由器方法

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

// 响应所有 HTTP 请求的路由
Route::any($uri, $callback);

// 响应多个指定 HTTP 请求的路由
Route::match(['get', 'post'], $uri, $callback);

// 响应指定 HTTP 请求的路由
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callbakc);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

依赖注入

可以在路由的回调方法中使用类型提示,用来获取路由所需的任何依存关系
声明的依赖项将由 Laravel 服务容器 自动解析并注入到回调中

use Illuminate\Http\Request;

// 使用类型提示的方式 将当前的 HTTP 请求自动注入到路由回调中
Route::get('/hello', function(Request $request){

});

CSRF 保护

指向 web 路由文件中定义的 POSTPUTPATCHDELETE 路由的任何 HTML 表单都应该包含一个 CSRF 令牌字段,否则这个请求将会被 拒绝

<form method="POST" action='/user'>
  @csrf
  ...
</form>

重定向路由

如果要定义 重定向到另一个 URL 的路由 ,可以使用 Route::redirect() 方法。
默认请求下,Route::redirect 返回的状态码是 302 ,但可以使用第三个可选参数自定义状态码
还可以使用 Route::permanentRedirect 来注册一个返回 301 的永久重定向路由

// 注册一个重定向路由,可以通过第三个可选参数来自定义状态码
Route::redirect('/hello', '/home', [301]);

// 注册一个永久重定向路由,返回状态码 301
Route::permanentRedirect('/hello', '/user');

视图路由

使用 Route::view 方法,可以返回注册一个返回视图的路由。

// 注册一个视图路由
// 第一个参数为 URI
// 第二个参数为 视图名称
// 第三个参数为 可选的数据数组 作为传递到视图的参数
Route::view('/welcome', 'welcome_page', ['title' => ‘Laravel’]);

注意:当在视图路由使用路由参数时,以下参数有 Laravel 保留,不可以使用:viewdatastatusheaders

路由参数