## 路由 ### 路由方法 `get`、`post`、`put`、`patch`、`delete`、`options`、`match`、`any` ### CSRF保护 表单中必须包含`@csrf` ### 重定向 `Route::redirect('/pre','/now');` #### 修改重定向状态码(默认302) 1. `Route::redirect('/pre','/now', 301);` 2. `Route::permanentRedirect('/pre', '/home');` ### 视图路由 `Route::view('/pre','pre', ['name' => 'aaa'])` 第一个参数为路由,第二个参数为访问视图,第三个参数省略,为传递给视图的参数 ### 路由参数 1. 路由的参数通常都会被放在 `{}` 内,并且参数名只能为字母,同时路由参数不能包含 `-`符号,如果有需要,可以用下划线 (`_`) 代替。路由参数会按顺序依次被注入到路由回调或者控制器中,而不受回调或者控制器的参数名称的影响。 2. `{name?}`为可选参数,但是必须保证有默认值 #### 正则约束 `->where('name', '[A-Za-z]+')` #### 全局约束 如果你希望某个具体的路由参数都遵循同一个正则表达式的约束,就使用`pattern`方法在`RouteServiceProvider`的`boot`方法中定义这些模式 ``` public function boot() { // Route::pattern('id', '[0-9]+'); parent::boot(); } ``` ### 路由命名 ``` Route::get('user/profile', function () { // })->name('profile'); ``` 1. 为路由指定了名称后,就可以使用全局辅助函数`route`来生成链接或者重定向到该路由: ``` // 生成 URL $url = route('profile', ['id' => 1]); // 生成重定向 return redirect()->route('profile'); ``` #### 检查当前路由 如果你想判断当前请求是否指向了某个命名过的路由,你可以调用路由实例上的`named`方法。例如,你可以在路由中间件中检查当前路由名称: ### 路由组 ### 中间件 ``` Route::middleware(['first', 'second'])->group(function () { Route::get('/', function () { // 使用 first 和 second 中间件 }); Route::get('user/profile', function () { // 使用 first 和 second 中间件 }); }); ``` ### 命令空间 另一个常见用例是使用 namespace 方法将相同的 PHP 命名空间分配给路由组的中所有的控制器 ``` Route::namespace('Admin')->group(function () { // 在 「App\Http\Controllers\Admin」 命名空间下的控制器 }); ``` ### 前缀 #### 路由前缀 `Route::prefix('admin')` #### 路由名称前缀 `Route::name('admin.')`