# 路由配置

参考：[Laravel HTTP 路由功能](https://docs.golaravel.com/docs/5.4/routing/)

## 路由配置

请先浏览顶部的官方链接的参考文档。这里只是简单的实例。

5.4的路由位置进行了改变

* `routes/web.php 定义状态路由`
* `routes/api.php  定义无状态路由`

> 有状态和无状态区别可以参考文章：[http协议和web应用有状态和无状态浅析](http://blog.sina.com.cn/s/blog_5a15b7d10101h4sk.html)

### 基础路由

对应可以使用的方法有get、post、put、delete等

```php
Route::get('basic1', function() {
    return 'Hello World';
});

Route::post('basic2', function() {
    return 'Baisc2';
});
```

### 多请求路由

对于多种请求的路由定义可以通过match和any方法实现，match需要设置请求方法数组、URL地址和请求处理函数三个参数，第一个参数要以数组的方式设置允许的请求方法，而any方法则对应所有HTTP请求方法。

```php
Route::match(['get', 'post'], 'multy1', function() {
   return 'multy1';
});

Route::any('multy2', function() {
   return 'multy2';
});
```

### 路由参数

通常情况下，GET请求可以通过URL地址（QueryString）的方式向服务器传递参数，在Laravel框架中有更优雅的形式传递参数，即通过路由参数进行传递。路由参数主要针对是GET请求的情况。

以下示例，其中?代表是一个可选参数，所以当参数值存在时，函数参数会正常接收，如果不存在，则会使用定义好的闭包函数的参数默认值。

where 可以选择添加对路由参数 正则表达式的验证，只有满足正则表达式的路由参数才能匹配路由，否则无法找到对应路由。

```php
Route::get('user/{id}', function($id) {
    return 'User-id-' . $id;
});

Route::get('user/{name?}', function($name = null) {
    return 'User-name-' . $name;
});

Route::get('user/{name?}', function($name = 'sean') {
    return 'User-name-' . $name;
});

Route::get('user/{name?}', function($name = 'sean') {
    return 'User-name-' . $name;
})->where('name', '[A-Za-z]+');


Route::get('user/{id}/{name?}', function($id, $name = 'sean') {
    return 'User-id-' . $id . '-name-' . $name;
})->where(['id' => '[0-9]+', 'name' => '[A-Za-z]+']);
```

### 路由别名

路由别名相当于在在路由定义的时候，为路由起了一个别名，在以后的程序中可以通过这个别名来获取路由信息。

```php
Route::get('user/center', ['as' => 'center', function() {
   return route('center');
}]);
```

这里起 了一个路由别名，以后可以使用这个路由名称产生URL地址或者重定向，如果`$url=route('center');`

### 路由群组

当一个项目很大时，会定义很多的路由，对路由进行分组将使得程序更加规范易读，而路由群组就是给某一类路由进行分组，同时给这个路由组添加中间件、前缀、子域名等，使路由定义更加简洁。

```php
Route::group(['prefix' => 'member'], function() {


   Route::get('user/center', ['as' => 'center', function() {
       return route('center');
   }]);

   Route::any('multy2', function() {
       return 'member-multy2';
   });
});
```

### 路由中输出视图

```php
Route::get('view', function () {
   return view('welcome');
});
```

### 路由与控制器关联

```php
Route::get('member/info', 'MemberController@info');

Route::any('member/info', ['uses' => 'MemberController@info']);

Route::any('member/info', [
   'uses' => 'MemberController@info',
   'as' => 'memberinfo'
]);

Route::any('member/{id}', ['uses' => 'MemberController@info'])
->where('id', '[0-9]+');

Route::controller('member', 'MemberController');
```

### 资料

[路由文档](https://laravelacademy.org/post/9538.html)
