2016-03-17 52 views
1

我想处理苗条框架中的错误自定义中间件,但不知道如何做到这一点像我的代码我这样做,如果请求不是四种特定类型,然后通过一个错误我想在errorHandler中处理适当的消息和状态,但是目前这个代码只是在邮件回复中的空白屏幕返回状态。我对SLIM不太了解。在此先感谢Slim框架中的错误处理自定义中间件

<?php 

require 'vendor/autoload.php'; 

use \Slim\App; 

$c = new \Slim\Container(); 

$c['notAllowedHandler'] = function ($c) { 
    return function ($request, $response, $methods) use ($c) { 
     return $c['response'] 
      ->withStatus(405) 
      ->withHeader('Allow', implode(', ', $methods)) 
      ->withHeader('Content-type', 'application/json') 
     ->write(json_encode(array("c_status"=>"405","message"=>"Bad Request"))); 
    }; 
}; 

$c['notFoundHandler'] = function ($c) { 
    return function ($request, $response) use ($c) { 
     return $c['response'] 
      ->withStatus(404) 
      ->withHeader('Content-type', 'application/json') 
     ->write(json_encode(array("c_status"=>"404","message"=>"Not Found"))); 
    }; 
}; 


$c['errorHandler'] = function ($c) { 
    return function ($request, $response, $exception) use ($c) { 
     $data = [ 
      'c_status' => $response->getStatus(), 
      'message' => $exception->getMessage() 
     ]; 
     return $container->get('response')->withStatus($response->getStatus()) 
      ->withHeader('Content-Type', 'application/json') 
      ->write(json_encode($data)); 
    }; 
}; 

$app = new App($c); 

$app->add(function ($request, $response, $next) { 
    if($request->isGet() || $request->isPost() || $request->isPut() || $request->isDelete()){ 
     $response = $next($request, $response); 
    }else{ 
     $response = $response->withStatus(403); 
    } 
    return $response; 
}); 

require 'API/routes.php'; 
$app->run(); 

回答

0

抛出一个异常:

$app->add(function ($request, $response, $next) { 
    if($request->isGet() || $request->isPost() || $request->isPut() || $request->isDelete()){ 
     $response = $next($request, $response); 
    }else{ 
     throw new \Exception("Forbidden", 403); 
    } 
    return $response; 
})