簡體   English   中英

CakePHP REST API 基本路由

[英]CakePHP REST API basic routing

我試圖讓一個簡單的 rest API 在 CakePHP 工作,但由於某種原因,資源路由不起作用。

從一個干凈的應用程序(my_app)和蛋糕文檔中的簡單 rest 示例開始,執行以下操作:

  1. 在 routes.php 底部添加了 setExtensions 和資源
Router::scope('/', function ($routes) {
    $routes->setExtensions(['json']);
    $routes->resources('Recipes');
});

創建了一個食譜控制器:

<?php
namespace my_app\Controller;

use my_app\Controller\AppController;

class RecipesController extends AppController
{
    public function initialize()
    {
        parent::initialize();
        $this->loadComponent('RequestHandler');
    }

    public function index()
    {
        echo 'index'; exit;
    }

    public function view($id)
    {
        echo "view $id"; exit;
    }

    public function add()
    {
        echo 'add'; exit;
    }

    public function edit($id)
    {
        echo "edit $id"; exit;
    }

    public function delete($id)
    {
        echo "delete $id"; exit;
    }
}
  1. 做了一些 curl 請求:
curl -X "POST" -H "Accept: application/json" 'https://nvl.crazytje.com/comapi/Recipes'
=> expecting: "add"
=> result: "index"

curl -X "DELETE" -H "Accept: application/json" 'https://nvl.crazytje.com/comapi/Recipes/1'
=> expecting "delete 1"
=> result: "action not found"

curl -X "GET" -H "Accept: application/json" 'https://nvl.crazytje.com/comapi/Recipes/1'
=> expecting: "view 1"
=> result: action not found

curl -X "PUT" -H "Accept: application/json" 'https://nvl.crazytje.com/comapi/Recipes/1'
=> expecting: "edit 1"
=> result: action not found

我缺少哪些步驟才能使其正常工作? 在過去(幾年前)我有這個工作,不知道我做了什么不同

不知道這是否是最好的方法,但似乎適用於我的小應用程序。 創建了一個改變動作的中間件

use Cake\Http\Response;
use Cake\Http\ServerRequest;

class RESTMiddleware {
    public function __invoke(ServerRequest $request, Response $response, $next) {
        $params = (array)$request->getAttribute('params', []);
        if(empty($params['action']) || !method_exists("\Comapi\Controller\InvoiceController", $params['action'])) {
            switch(strtolower($request->getMethod())) {
                case 'get':
                    if(empty($params['action']) || $params['action'] == 'index') {
                        $params['action'] = 'index';
                    } else {
                        $params['pass'][] = $params['action'];
                        $params['action'] = 'view';
                    }
                    break;
                case 'post':
                    $params['action'] = 'add';
                    break;
                case 'put':
                case 'patch':
                    $params['pass'][] = $params['action'];
                    $params['action'] = 'edit';
                    break;
                case 'delete':
                    $params['pass'][] = $params['action'];            
                    $params['action'] = 'delete';
                    break;            
            }
        }
        $request = $request->withAttribute('params', $params);
        $response = $next($request, $response);
        return $response;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM