繁体   English   中英

如何在Symfony2中包装控制器的动作?

[英]How do I wrap controller's action in Symfony2?

是否可以将某些控制器的动作包装在Symfony2的自定义逻辑中?

我想创建一个“ AJAX”控制器,以便处理应用程序中的所有AJAX请求。 我想从操作中删除样板代码,以简化应用程序逻辑。 我想通过包装器实现以下几点:

  1. try ... catch块中包装动作调用,以捕获所有可能的异常并将输出转换为JSON而不是一般的500个HTML错误页面。 因此,我可以在客户端优雅地处理它们。
  2. 从操作调用中返回纯数组,以便稍后对其进行重写并将其转换为适当的JsonResponse对象。

如果可以实现这样的包装器,是否还可以基于路由启用它?

更新:

这是我的示例:

/**
 * 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM