[英]How do I wrap controller's action in Symfony2?
是否可以将某些控制器的动作包装在Symfony2的自定义逻辑中?
我想创建一个“ AJAX”控制器,以便处理应用程序中的所有AJAX请求。 我想从操作中删除样板代码,以简化应用程序逻辑。 我想通过包装器实现以下几点:
try ... catch
块中包装动作调用,以捕获所有可能的异常并将输出转换为JSON而不是一般的500个HTML错误页面。 因此,我可以在客户端优雅地处理它们。 如果可以实现这样的包装器,是否还可以基于路由启用它?
这是我的示例:
/**
* It is now.
* @return JsonResponse
*/
public function someAction()
{
try {
// Some business logic here.
$foo = getFoo();
$bar = getBar($foo);
// Sending response.
return new JsonResponse([
'success' => true,
'data' => [
'foo' => $foo,
'bar' => $bar,
],
]);
} catch (\Exception $exception) {
// Handle exception here. Translate error message, etc.
return new JsonResponse([
'success' => false,
'message' => $exception->getMessage(),
'code' => $exception->getCode(),
]);
}
}
/**
* How I want it to be.
* @return array
*/
public function someBetterAction()
{
// Some business logic here.
$foo = getFoo();
$bar = getBar($foo);
// Sending response.
return [
'foo' => $foo,
'bar' => $bar,
];
}
换句话说,我只想将异常处理和输出格式移到包装层以使操作更轻便。
您可以使用像FOSRestBundle (& Docs )这样的自定义异常处理程序,该处理程序(显然)将处理在操作过程中创建的所有异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.