# 路由

ecshopx 采用 Dingo API 来构建和管理 API。

为了避免与项目路由冲突，dingo/api 将会使用其专属的路由实例。 在 `bootstrap/route.php` 中定义了API 路由的实例：

```php
$api = app('Dingo\Api\Routing\Router');
```

## 路由定义

ecshopx 前端包含了 admin管理端、shop 管理端、小程序、PC 和 H5 等终端，所以在`routes` 文件下，我们对路由做了分组：

* admin
* api
* frontapi
* shopapi
* super
* thirdparty

每个 Bundle 的路由根据需求定义在`routes`文件夹下的分组中，路由文件名称为业务名称，路由定义是必须定义版本号，默认为 `V1`，定义了一条路由就定义了一个接口。

路由定义的语法请参考 Dingo API，以 `AftersalesBundle` 为例：

定义路由

```php
$api->version('v1', function($api) {
    // 售后相关api
    $api->group(['namespace' => 'AftersalesBundle\Http\Api\V1\Action', 'middleware' => ['api.auth', 'activated', 'shoplog'], 'providers' => 'jwt'], function($api) {
        $api->get('/aftersales', ['name' => '获取售后列表', 'as' => 'aftersales.list', 'uses' => 'Aftersales@getAftersalesList']);
    });

});
```

其中

```
'uses' => 'Aftersales@getAftersalesList'
```

`Aftersales`为对用控制器类名，`getAftersalesList`为方法名。

`AftersalesBundle`的路由会存在于以下几个分组：

* routes/api/aftersales.php
* routes/frontapi/aftersales.php
* routes/shopapi/aftersales.php

## 路由注册

在定义路由之后，必须手工注册到`bootstrap/route.php`中，才可以使用。

比如 `AftersalesBundle` 新增了一组 admin 的路由，我们定义文件路径为：

```
routes/admin/aftersales.php
```

我们需要将此文件加入到`bootstrap/route.php`中：

```
<?PHP

...
require __DIR__.'/../routes/admin/aftersales.php';
...
```
