Laravel 的所有路由都定义在路由文件中,这些文件位于项目根目录的routes/
目录下。
这些文件由应用程序的App\Providers\RouteServiceProvider
服务自动加载。routes/web.php
文件定义了用于 Web 界面的路由,这些路由被分配给web
中间件组,该组提供会话状态和 CSRF 保护等功能。routes/api.php
中的路由是无状态的,这些路由被分配给api
中间件。
对于大多数应用程序,都是以在web.php
文件定义路由开始的。可以通过在浏览器中输入定义的路由 URL 来访问 routes/web.php
的路由,例如:
use Illuminate\Support\Facades\Route;
Route::get('/hello', function () {
return 'Hello Laravel';
});
// 通过 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
路由文件中定义的 POST
、PUT
、PATCH
或 DELETE
路由的任何 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 保留,不可以使用:view
,data
,status
和 headers
。