Zend framework2 如何处理错误(AbstractRestfulController)?

Zend framework2 如何处理错误(AbstractRestfulController)?,zend-framework2,Zend Framework2,我尝试使用AbstractRestfulController。我创建控制器类: class MyController extends AbstractRestfulController{ public function getList(){ $data = array(); return new JsonModel(array( 'data' => $data, )); } public

我尝试使用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或其他任何东西时会发生什么呢?我想自己处理。如何做?

您的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'),
        ));
    }
}

显然,对其他方法也要这样做,并尝试使用适当的

,但如果存在错误的url怎么办?如果我在“模板映射”中设置了“error/404”,它会从view/error返回标准文本/html页面。我不能分配控制器/模块/任何东西来处理错误?这不是你要求的。对于一个糟糕的URL,还有很多要考虑的问题,比如你的站点是否也服务于标准的HTTP页面?如果不是,您可以设计一个404视图策略,在路由出现404响应时返回一个JsonModel。如果它也处理http,那么您就必须想出一个策略来确定是错误的api请求还是真正的用户输入了错误的链接。我认为你需要考虑什么是可以接受的,就像我说的,处理客户的错误不是你的责任。他们收到一个404和一个html而不是json响应就足够了。