更新/放置路线-不允许的方法

时间:2018-10-22 13:45:41

标签: php slim

我正在使用邮递员来测试我的API,但是现在我在放置路由上遇到了问题。 所以这是我写的推杆路线:

$app->put('/setting/{id}/settingvalue', function (ServerRequestInterface $request, Response

Interface $response, $args) {

    try {
        $user = new \Riecken\PBS\controller\SettingsValueController();
        $result = $user->updateOneSettingsValueinDetail( $args['id'], $request->getParsedBody());
        $response = $response->withJson($result);
        $response = $response->withStatus(200);
        return $response;

    }catch(Exception $e) {

        $response->getBody()->write($e->getMessage());
        return $response->withStatus($e->getCode());

    }

});

这是您在上面看到的功能(updateOneSettingsValueinDetail):

public function updateOneSettingsValueinDetail ($settingsvalueIdToUpdate, $body) {

    try {

        return $this->SettingsValueDao->update($settingsvalueIdToUpdate, $body);

    }catch(DAOException $e) {
        throw new \Exception($e->returnErrorMessage(), $e->returnHttpCode());
    }catch(\Exception $e) {
        throw new \Exception("System Error", 500);
    }


}

问题是Postman告诉我不允许使用Method,仅允许POST和GET: enter image description here

有人知道这是什么类型的问题以及可能的解决方案是什么?

1 个答案:

答案 0 :(得分:1)

此响应来自Slim的NotAllowedHandler。而且它不仅是默认的POST和GET。此响应与您上面提到的代码无关。

您确定没有自定义“ NotAllowedHandler”并且没有将应用程序绑定为中间件吗?

我编写了包含以下内容的代码,将导致相同的情况:

<?php

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Slim\App;

require __DIR__ . '/../vendor/autoload.php';

$app = new App([]);

$container = $app->getContainer();

$app->add(function ($request, $response, $next) {
    $allowed = ['GET', 'POST'];
    if (!in_array($request->getMethod(), $allowed)) {
        $notAllowed = new \Slim\Handlers\NotAllowed();
        return $notAllowed($request, $response, $allowed);
    }
    $next($request, $response);
});

$app->put('/setting/{id}/settingvalue', function (ServerRequestInterface $request, ResponseInterface $response, $args) {
    die("Expected Context via PUT");
});

$app->get('/setting/{id}/settingvalue', function (ServerRequestInterface $request, ResponseInterface $response, $args) {
    die("Expected Other Context via GET");
});

$app->run();

希望对您有所帮助。