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 。
