1

我想要标准化所有 JSON 响应(例如来自视图的标准化 JSON 响应)。这是 JSON 响应示例

{
    "status" : "failure",
    "errors" : {
        "name" : [ "Error text 1", "Error text 2" ],
        "email" : [ "Email error text" ]
    }
}

这是实现我的标准化 JSON 响应的类

class JsonResponse
{

    protected $_errors = array();

    public function addError($key, $value) {
        $this->_errors[$key][] = $value;
        return $this;
    }

    public function setFormErrors(Zend_Form_Abstract $form) {
        $this->_errors = $form->getErrors();
        return $this;
    }

    public function __toArray() {
        if (!empty($this->errors)) {
            return array(
                'status' => 'fail',
                'errors' => $errors,
            );
        }
        return array(
            'status' => 'success',            
        );
    }

    public function __toString() {
        return json_encode($this->__toArray());
    }

}

一切都很好,但是使用这个类真的很痛苦。

class App_Controller extends Zend_Action_Controller
{

    public function submitAction()
    {
        $form = new App_Form();
        $form->isValid($this->getRequest()->getPost());

        //disabling displaying layout
        $this->_helper->layout()->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);

        $response = new JsonResponse();
        $response->setFormErrors($form);

        echo $response;     
    }

}

我是 Zend 框架中的真正菜鸟。将JsonResponse包装到的最佳方法是什么?

  • 帮手
  • 延长Zend_Controller_Response_Abstract
  • 新的上下文切换
  • 实施于Form

最好的方法是什么?

使用 Zend Action Helper ContextSwitch 创建自定义 JSON 响应对象- 这样做的好方法,但仍然需要太多代码,恕我直言。

4

1 回答 1

0

IMO,您应该使用上下文切换(JSON或您自己的)并使用您喜欢的方式来格式化您的响应数据结构。

好像您正在实施 ajax 表单验证,不是吗?也许你应该看看这个:Zend form ajax validation on submit (and ask google about processAjax())

于 2012-10-02T02:16:49.213 回答