以下代码正确重定向;但也引发了一个例外:
$app->post("/foo", function () use ($app) {
try {
$app->redirect('/bar');
} catch (Exception $e) {
$app->log->debug("\n" . $e->getFile() . " (Line " . $e->getLine() . ") " . " - " . strftime('%c') . ": Exception (" . $e->getMessage() . ")");
$app->log->debug("\n" . $e->getTraceAsString());
}
});
这是来自Slim日志:
/{site root}/Slim/Slim.php (Line 1017) - Wed Sep 17 17:51:33 2014: Exception ()
#0 /{site root}/Slim/Slim.php(1037): Slim\Slim->stop()
#1 /{site root}/Slim/Slim.php(1100): Slim\Slim->halt(302)
#2 /{site root}/index.php(328): Slim\Slim->redirect('/bar')
#3 [internal function]: {closure}()
#4 /{site root}/Slim/Route.php(462): call_user_func_array(Object(Closure), Array)
#5 /{site root}/Slim/Slim.php(1326): Slim\Route->dispatch()
#6 /{site root}/Slim/Middleware/Flash.php(85): Slim\Slim->call()
#7 /{site root}/Slim/Middleware/MethodOverride.php(92): Slim\Middleware\Flash->call()
#8 /{site root}/Slim/Middleware/PrettyExceptions.php(67): Slim\Middleware\MethodOverride->call()
#9 /{site root}/Slim/Slim.php(1271): Slim\Middleware\PrettyExceptions->call()
#10 /{site root}/index.php(689): Slim\Slim->run()
#11 {main}
我做错了什么?或者这是Slim中的一个错误?我无法提及这个特殊问题。
答案 0 :(得分:7)
Slim使用路由助手的例外,重定向就是其中之一。请参阅文档中的“Route Helpers”部分:
请注意以下应用程序实例方法助手
halt()
,pass()
,redirect()
和stop()
都是使用 例外。每个人都会抛出一个\Slim\Exception\Stop
或\Slim\Exception\Pass
例外...... 如果意外,这种行为可能会令人惊讶。
有代码示例显示您正在经历的行为以及如何避免它。诀窍是重定向catch块中的错误并在try / catch块之后重定向成功。