如何使用Symfony2在RESTful API中处理自定义异常/闪烁消息

时间:2014-04-15 19:09:23

标签: rest symfony fosrestbundle

我们说我经营一家服装网店。我有一张订单,我的客户可以下订单。客户填写他们的T恤订单并提交表格。问题是T恤缺货。

这不是验证问题,因为订单有效,所以我不会创建自定义验证器。

我正在使用FOSRestBundle并尝试同时支持HTML和JSON。我也试图通过域名事件来完成很多事情。

这是我的伪编码控制器

class OrderController extends BaseOrderController
{
    public function createAssetAction(Request $request)
    {
        $form = $this->getOrderCreateForm();
        $form->handleRequest($request);

        if ($form->isValid()) {

            // should i wrap this in a try/catch?
            $this->dispatch(OrderEvents::PRE_CREATE, $event = new FormEvent($form, $form->getData()));

            // or check if the event is stopped and pull out an error message? 

            if ($order = $event->getData()) {

                $this->getOrderRepository()->persist($order);
                $this->dispatch(OrderEvents::POST_CREATE, new ResourceEvent($order));

                $view = $this->routeRedirectView('my_orders', array(), Codes::HTTP_MOVED_PERMANENTLY);
                $view->setData(array('order' => $order));
                return $this->handleView($view);
            }
        }

        $view = $this->view($form)
            ->setTemplateVar('form')
            ->setTemplate('OrderBundle:Order:newOrder.html.twig');

        return $this->handleView($view);
    } 
}

我想我会检查OrderEvents::PRE_CREATE事件中的订单清单。如果库存不足或者停止事件传播并向事件添加消息,我不知道是否在事件监听器中抛出异常。

如果我抛出异常,我必须在控制器中捕获它,这样我就可以将异常消息设置为HTML请求的flash消息,或者直接返回消息以获取JSON响应。

如果我这样做,我必须在try / catches中将所有事件调度包装在控制器中,这似乎是错误的。

我已经看过LiipCacheControl包,它将flash消息转换为cookie但是将状态引入我的无状态REST API。

有人有建议吗?

0 个答案:

没有答案