HTTP 路由
基本路由
最基本的路由只需要一个 URI 与一个 闭包
,这里提供了一个非常简单优雅的定义路由的方法:
Route::get('foo', function () {
return 'Hello World';
});
默认路由文件
所有的 Laravel 路由都在 routes
目录中的路由文件中定义,这些文件都由框架自动加载。 routes/web.php
文件中定义你的 web 页面路由。这些路由都会应用 web
中间件组,其提供了诸如 Session
和 CSRF
保护等特性。定义在 routes/api.php
中的路由都是无状态的,并且会应用 api
中间件组。
大多数的应用,都是从 routes/web.php
文件开始定义路由。
可用的路由方法
我们可以注册路由来响应所有的 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);
有的时候你可能需要注册一个可响应多个 HTTP 方法的路由,这时可以使用 match
方法,也可以使用 any
方法注册一个实现响应所有 HTTP 的请求的路由:
Route::match(['get', 'post'], '/', function () {
//
});
Route::any('foo', function () {
//
});
CSRF 保护
任何指向 web
中 POST
, PUT
或 DELETE
路由的 HTML 表单请求都应该包含一个 CSRF 令牌,否则,这个请求将会被拒绝。更多的关于 CSRF 的说明在 CSRF documentation:
<form method="POST" action="/profile">
{{ csrf_field() }}
...
</form>
路由参数
必选路由参数
当然,有时我们需要在路由中捕获一些 URL 片段。例如,我们需要从 URL 中捕获用户的 ID ,我们可以这样定义路由参数:
Route::get('user/{id}', function ($id) {
return 'User '.$id;
});
也可以在路由中定义多个参数:
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
//
});
路由的参数通常都会被放在 {}
内,并且参数名只能为字母,当运行路由时,参数会通过路由闭包来传递。
注意
路由参数不能包含 -
字符。请用下划线 (_
) 替换。