将 api 个版本添加到 Cakephp 模态视图控制器系统

Adding api versions to Cakephp modal view controller system

我正在使用 CAKEPHP 创建我的应用程序 api,

目前我在`

中的控制器很少

app/controllers/{UsersController, AdminController, StoresController}

` 等等

我正在以 //users/

访问我的控制器

但是我想在 cakephp 中添加版本控制系统

类似于

<ip>/<foldername>/v1/users/<action>
<ip>/<foldername>/v2/users/<action>

我尝试在 Controllers/ 中创建一个文件夹作为 Controllers/v1/UsersController.php

但是我无法访问它。 我如何配置我的路线

我对您使用的 CakePHP 版本感到很困惑(您标记了 cakephp-3.0,并且您使用的文件夹结构类似于 2.x),但是两者 2.x 和 3.x 版本有一个共同的概念叫做 Prefix Routing,这是你应该在这里使用的。下面的例子假设 CakePHP 3.x:

您需要在控制器目录中创建目录(v1、v2)。接下来,在那个文件夹中创建单独的控制器,记住命名空间也应该反映这个结构:

<?php
namespace App\Controller\v1;
use App\Controller\AppController;

class UsersController extends AppController {
    //...
}

最后一步是在 routes.php 中配置路由。示例如下:

Router::prefix("v1", function (RouteBuilder $routes){
    $routes->fallbacks(DashedRoute::class);
});

可在此处找到更多信息: Prefix Routing

对于 CakePHP 2.x 情况略有不同:

在 v2.x 中,您不应在 Controller 目录中创建文件夹。所有有前缀和无前缀的函数都将驻留在单个控制器中,例如

class UsersController extends AppController {
    /**
    * Unprefixed function
    */
    public function login(){
    }

    /**
    * Prefix v1
    */
    public function v1_login(){
    }

    /**
    * Prefix v2
    */
    public function v2_login(){
    }
}

接下来,您需要在 app/Config/core.php 文件中配置这些前缀,如下所示:

Configure::write('Routing.prefixes', array('v1', 'v2'));

在此之后,您应该能够使用 v1 和 v2 前缀访问您的操作,例如 yourapp/v1/users/login 将映射到 UsersController::v1_login()yourapp/v2/users/login 将映射到 UsersController::v2_login()

2.x 文档中的更多信息:Prefix Routing v2.x