我们说我经营一家服装网店。我有一张订单,我的客户可以下订单。客户填写他们的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。
有人有建议吗?