我搜索了很多答案,但我找不到我需要的答案,因为我甚至不知道如何创建正确的问题。这是一个例子。
$app->map('/v1/:module/:group/:action(/:id)', function ($module, $group, $action, $id = NULL) use ($app) {
$method = ucfirst($app->request->getMethod());
$file = "modules/{$module}/{$group}/{$method}{$action}.php";
if(!file_exists($file)) {
$app->halt(404, Error::_('API Processor was not found!', 404));
}
include_once $file;
$app->stop();
})
这是我瘦的restful框架的API方法。现在为Error::_('API Processor was not found!', 404)
我有
class Error {
public static function _($msg, $code = 500) {
global $module, $group, $action;
return json_encode(array(
'error' => true,
'code' => $code,
'message' => $msg,
'module' => $module
));
}
}
我希望操作系统能够访问$module, $group, $action
个变量而不将它们传递给该函数。但就我而言,$module
是NULL
。
{
"error":true,
"code":404,
"message":"API Processor was not found!",
"module":null
}
可能的?
答案 0 :(得分:1)
如果我使用Slim Error Handling功能正确理解了您的问题, 能够满足这些要求。如果它是我的项目,我会创建一个自定义异常,以便在您计划使用自定义错误函数的任何地方抛出。
注意 :以下所有代码都是未经测试的,并且在我的脑海中写下来。警告和所有这些。
class CustomErrorException extends \Exception
{
}
然后,无论我在哪里使用自定义错误函数,我都会抛出该异常。
if(!file_exists($file)) {
throw new CustomErrorException('API Processor was not found!', 404);
}
最后,我写了一个看起来像这样的错误函数:
$app->error(function (\Exception $e) use ($app) {
if ($e instanceof CustomErrorException) {
// Parse $path to get $module, $group, and $action
// (Seems like that would work based on the route in your example: '/v1/:module/:group/:action(/:id)')
$path = $app->request->getPath();
// Possible new method signature for Error::_
Error::_($e->getMessage(), $e->getCode(), $module, $group, $action);
// Render an error page, $app->halt(), whatever.
}
});
这应该有助于DRY您的代码,并允许您转储这些global
变量。