2016-05-31 24 views
3

我第一次使用Slim框架創建api。苗條的框架方法notFound不是一個有效的方法

我想返回一個特定的響應,如果沒有找到URL。

我使用超薄框架notFound功能如下:

$app->notFound(function() use ($app) { 
    $res = array("msg"=>"page not found"); 
    $response->getBody()->write(json_encode($res)); 
    return $response; 
}); 

,但是當我在我的PHP頁面中添加這行代碼它顯示我以下錯誤:

Fatal error: Uncaught exception 'BadMethodCallException' with message 'Method notFound is not a valid method' in C:\wamp\www\api\vendor\slim\slim\Slim\App.php on line 129

BadMethodCallException: Method notFound is not a valid method in C:\wamp\www\api\vendor\slim\slim\Slim\App.php on line 129

+0

修身M8的版本錯誤。你已經安裝了Slim 3。 – geggleto

+0

所以這不適用苗條的3? –

+0

不,它不會工作。 – geggleto

回答

3

看來你是使用Slim 3與Slim 2的一些代碼。
在3中,您可以通過在容器中添加處理程序(mode details here)或通過添加中間件來實現:
編輯 - 作爲@geggleto指出的,我忘了提,爲下面的代碼,你也應該設置$settings['determineRouteBeforeAppMiddleware'] = true

/** 
* check if route exists 
*/ 
$middleware = function (Request $request, Response $response, $next) { 

    if (!$request->getAttribute('route')) { 
     $res = array("msg"=>"page not found"); 
     $response->getBody()->write(json_encode($res)); 
     return $response; 
    } 

    return $next($request, $response); 
}; 
$app->add($middleware); 
+1

這是缺少一些非常關鍵的細節....像用於determinRouteBeforeDispatch的苗條選項 – geggleto