我在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控制器中没有代码重复进行验证?
答案 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)
}
}