如何使用zf1验证器验证服务中的模型?

时间:2017-06-14 12:18:30

标签: validation zend-framework service

我在Zend Framework 1项目中注入了一个服务层。该项目还为Android和其他设备提供REST API。我的项目布局如下所示

Application 
 modules
      default
         controller
             CustomerController.php [for web]
      api
         controllers
              CustomerController.php [for android device]
 services
   CustomerService.php

虽然CustomerService.php类处理所有客户创建逻辑,但在api和default模块中由CustomerController.php使用。使用表单可以轻松验证用户在Web中提交的值。如何验证服务中的用户提交的值,以便前端和api控制器中没有代码重复进行验证?

1 个答案:

答案 0 :(得分:0)

您可以使用相同的表单类在API控制器和Web控制器中验证您的数据:

在您的网络控制器中,您可能有类似的内容:

$form = new CustomerForm();
if ($this->getRequest()->isPost()) {
    if ($form->isValid($this->getRequest()->getPost()) {
        // persist your Customer here, then redirect
    }
}
$this->view->form = $form;

在您的API控制器中,以相同的方式使用您的表单。如果验证失败,您只需发回表单错误。

$form = new CustomerForm();
if ($this->getRequest()->isPost()) {
    if ($form->isValid($this->getRequest()->getPost()) {
        // Validation passed.

        // TODO: persist your Customer here, then send back the Customer data (as JSON / XML).

        return;

    } else {
        // Validation failed. Send back form error messages and set HTTP response code to 400 (bad request)
        $this->getResponse()->setHttpResponseCode(400);
        $errors = $this->form->getMessages();

        // TODO: send your errors here (as JSON or XML)
    }
}