Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 斯利姆:如何捕捉无效路由?_Php_Http_Slim - Fatal编程技术网

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()似乎都没有注册…(请参阅我的更新)。