Php 斯利姆:如何捕捉无效路由?
我已经用Php 斯利姆:如何捕捉无效路由?,php,http,slim,Php,Http,Slim,我已经用Slim设置了一个简单的RESTful服务 这是我的路线的摘录: ... $app->get('/persons/get', function() { getPersons(); }); $app->get('/persons/get/:id', function($id) { getPerson($id); }); $app->put('/persons/setprop/:id/:prop', function($id) { setPersonProp($id); }
Slim
设置了一个简单的RESTful服务这是我的路线的摘录:
...
$app->get('/persons/get', function() { getPersons(); });
$app->get('/persons/get/:id', function($id) { getPerson($id); });
$app->put('/persons/setprop/:id/:prop', function($id) { setPersonProp($id); });
$app->options('/.+', function() { options(); });
$app->run();
如果我收到一个不可预见的请求Slim
用405方法回答,不允许使用HTTP状态码。如何捕捉未预见的请求,以自定义答案 更新:
正如@Martin Turjak所建议的,我添加了error()和notFound()方法,因此这是我当前的代码:
...
$app->get('/persons/get', function() { getPersons(); });
$app->get('/persons/get/:id', function($id) { getPerson($id); });
$app->put('/persons/setprop/:id/:prop', function($id) { setPersonProp($id); });
$app->options('/.+', function() { options(); });
$app->error(function(Exception $e) {
echo("Error:");
var_dump($e);
});
$app->notFound(function() {
echo("Not Found!");
});
$app->run();
由于某些原因,$app->notFound()和$app->error()似乎都没有注册。。。我不断收到错误路线的405错误…:-(例如,打电话
注意:我目前正在测试来自同一域的Slim服务,但我也需要它跨域工作…通常,如果没有与请求匹配的路由,将抛出一个404 Not Found,您可以使用
notFound
路由自定义该路由:
$app->notFound(function() { ... });
我相信您的500必须是基于其他原因抛出的(您可能希望检查您的getPerson
和所有其他函数是否正确处理了所有事情…因为内部服务器错误不应表示请求问题)…但是,您可以使用通用错误路由自定义任何错误:
$app->error(function(\Exception $e) { ... });
然后,可以根据错误代码呈现自定义错误响应消息
请参见此处的更多信息正常情况下,如果没有与请求匹配的路由,则会抛出一个404 Not Found,您可以使用
notFound
路由进行自定义:
$app->notFound(function() { ... });
我相信您的500必须是基于其他原因抛出的(您可能希望检查您的getPerson
和所有其他函数是否正确处理了所有事情…因为内部服务器错误不应表示请求问题)…但是,您可以使用通用错误路由自定义任何错误:
$app->error(function(\Exception $e) { ... });
然后,可以根据错误代码呈现自定义错误响应消息
在这里查看更多信息谢谢你的回答!出于某种原因,我现在得到了405方法不允许,不再是500(以前我可能是从grunt在端口9000上提供的角度应用程序中测试跨域的)。不幸的是,$app->notFound()和$app->error()似乎都没有注册…(请参阅我的更新)。谢谢你的回答!由于某些原因,我现在得到了405方法不允许,不再是500(以前我可能是从grunt在端口9000上提供的Angular应用程序中测试跨域的…)。不幸的是,$app->notFound()或$app->error()似乎都没有注册…(请参阅我的更新)。