2013-03-06 124 views
1

我尝试使用AbstractRestfulController。我创建控制器类:如何处理错误(AbstractRestfulController)?

class MyController extends AbstractRestfulController{ 

    public function getList(){ 
     $data = array(); 

     return new JsonModel(array(
      'data' => $data, 
     )); 
    } 

    public function get($id){ 
     $data = array(); 

     return new JsonModel(array(
      'data' => $data, 
     )); 
    } 

    public function create($data){ 
     $data = array(); 

     return new JsonModel(array(
      'data' => $data, 
     )); 
    } 

    public function update($id, $data){ 
     $data = array(); 

     return new JsonModel(array(
      'data' => $data, 
     )); 
    } 

    public function delete($id){ 
     $data = array(); 

     return new JsonModel(array(
      'data' => $data, 
     )); 
    } 

} 

和路由:

return array(
    'router' => array(
     'routes' => array(
      'mylink' => array(
       'type' => 'Segment', 
       'options' => array(
        'route' => '/mylink[/:id]', 
        'constraints' => array(
         'id'  => '[0-9]+', 
        ), 
        'defaults' => array(
         'controller' => 'MyModule\Controller\My', 
        ), 
       ), 
      ), 
     ), 
    ), 
    'controllers' => array(
     'invokables' => array(
      'MyModule\Controller\My' => 'MyModule\Controller\MyController', 
     ), 
    ), 
    'view_manager' => array(
     'strategies' => array(
      'ViewJsonStrategy', 
     ), 
    ), 
); 

但是当用户调用错误的方法或错误的ID或其他任何东西会发生什么?我想亲自处理。怎么做?

回答

3

您的API仍然应该以请求的格式(json,xml等)返回响应,通常会使用一些错误代码/消息来描述问题,以及相应的http响应代码。您应该告诉消费者您的api预期的响应是什么,但是当错误发生时应该由他们来处理。

从这个角度看它的设置的响应和填充相关信息返回模型的一个简单的例子,一个典型的响应可能类似于以下...

public function get($id) 
{ 
    // some processing to find id ... 

    // no id found 
    if (!$found) { 
     // set 404 Not Found response 
     $this->getResponse()->setStatusCode(404); 
     // return message to client 
     return new JsonModel(array(
      'error' => 404, 
      'reason' => sprint_f('Requested id "%s" not found', $id'), 
     )); 
    } 
} 

显然做同样为其他方法,并尝试使用适当的HTTP response code

+0

但是,如果网址不正确?如果我在'template_map'中设置'error/404',它将返回标准文本/ html页面的视图/错误。我无法分配控制器/模块/无论处理错误? – Nips 2013-03-06 10:25:25

+1

这不是你问的。对于一个不好的网址有更多的考虑,比如你的网站是否也提供标准的http页面?如果没有,你可以设计一个404视图策略,在路由404响应的情况下返回一个JsonModel。如果它也处理http,则必须提出一个策略,可以确定这是一个错误的api请求还是误输入链接的真实用户。我认为你需要考虑什么是可以接受的,就像我说的那样,处理你的客户错误不是你的责任。他们收到了404以及html而不是json响应应该就足够了。 – Crisp 2013-03-06 10:41:35