2017-06-14 68 views
0

我在Zend Framework 1項目中注入了一個服務層。該項目還爲Android和其他設備提供了REST API。我的項目佈局看起來像這樣如何使用zf1驗證器來驗證服務中的模型?

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

雖然CustomerService.php類處理所有的客戶創造的邏輯,並通過CustomerController.php兩個API和默認模塊中消耗掉。使用表單很容易驗證用戶在網絡中提交的值。我如何驗證用戶在服務中提交的值,以便驗證前端和api控制器中沒有代碼重複?

回答

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) 
    } 
}