# Route路由
## 路由配置
```php
// routes/web.php
# 接收get请求 http://127.0.0.1:8000/test
Route::get('/test', function () {
return 'Hello Laravel';
});
# any接收任何请求方式
Route::any('/test', function () {
return 'Hello Laravel';
});
# 指定提交方式
Route::match(['get', 'post'], '/test', function () {
return 'Hello Laravel';
});
# 接收参数 http://127.0.0.1:8000/test/5
Route::get('/test/{id}', function ($id) {
return $id;
});
```
## 控制器
```bash
php8 artisan make:controller TaskController
```
自动生成的模板代码
```php
where('id', '[0-9]+');
// 多个参数
Route::get('/user/{id}/{name}', function ($id, $name) {
//
})->where([
'id' => '[0-9]+',
'name' => '[a-z]+'
]);
```
全局约束
```php
// App\Providers\RouteServiceProvider
where('id', '.*');
```
## 重定向路由
```php
// 状态码默认302,临时重定向
Route::redirect('/index', '/task');
// 301 永久重定向
Route::redirect('/index', '/task', 301);
// 等价于 永久重定向
Route::permanentRedirect('/index', '/task');
```
## 视图路由
视图模板
```html
{{-- resources/views/task.blade.php --}}
Document
{{-- 变量 --}}
{{$name}}
```
> !+ tab 可快速创建HTML模板
```php
// http://127.0.0.1:8000/task
// 方式一:
Route::view('/task', 'task', [
'name'=> 'Tom'
]);
// 方式二:使用助手函数返回view
Route::get('/task', function () {
return view('task', [
'name' => 'Tom'
]);
});
// 方式三:
Route::get('/task', [TaskController::class, 'index']);
```
Controller返回view
```php
'Tom'
]);
}
}
```
## 路由命名
```php
// 指定路由的名称
Route::get('/task', function(){
return 'task';
})->name('index.task');
// 使用助手函数生成URL(URL是URI的子集)
Route::get('/url', function(){
return route('index.task');
// http://127.0.0.1:8000/task
});
// 传参
Route::get('/url', function(){
return route('index.task', ['name'=> 'Tom']);
// http://127.0.0.1:8000/task?name=Tom
});
// 路由跳转
Route::get('/url', function(){
return redirect()->route('index.task', ['name'=> 'Tom']);
// 跳转地址:http://127.0.0.1:8000/task?name=Tom
});
// 生成相对地址
Route::get('/url', function(){
return route('index.task', ['name'=> 'Tom'], false);
// /task?name=Tom
});
```
## 路由分组
```php
// 添加路由前缀
Route::group(['prefix' => 'api'], function () {
// http://127.0.0.1:8000/api/index
Route::get('/index', function () {
return 'index';
});
// http://127.0.0.1:8000/api/task
Route::get('/task', function () {
return 'task';
});
});
// 等价于(推荐)
Route::prefix('api')->group(function () {
// http://127.0.0.1:8000/api/index
Route::get('/index', function () {
return 'index';
});
// http://127.0.0.1:8000/api/task
Route::get('/task', function () {
return 'task';
});
});
// 路由中间件
Route::middleware('middleware')->group(function () {});
// 子域路由
Route::domain('127.0.0.1')->group(function () {});
// 命名空间
Route::namespace('Admin')->group(function () {});
// 路由名称前缀
Route::name('admin.')->group(function () {
Route::get('/task', function () {
return 'task';
})->name('task');
// admin.task
});
```
## 单动作控制器
```bash
php artisan make:controller OneController --invokable
```
```php
name('index.task');
```
### 当前路由指向的方法
```php