即使是 AJAX 请求,您仍然需要验证输入。不是您向您的应用程序发送输入(通过 AJAX),而是浏览器,您无法信任。
作为一般设计原则,避免特殊情况(此处:ajax 与非 ajax)。通常,您希望平等对待所有情况,因此您最终会采用正交方法。
正如你所看到的
class SomeController extends Controller {
function index() {
if(!$this->input->is_ajax_request()) {
// validate input <-- XXX here we need to validate it too
// load model
// create form
// pass data to view
// ...
} else {
// validate input
// load model
// write data to database
// return with some json string
}
}
}
这会导致重复代码(难以维护和保持同步)。
您的代码,正交方法:
class SomeController extends Controller {
function index() {
// load model (takes care of his own validation, the self-containment principle of OOP)
// coordinate same business logic done by different models
// return models/data to the view, the framework will decide whether it uses the html or the json view file
}
}
相反,模型(它可以是相同的模型类,或者像 Zend Framework 中的 Form 模型,或者像 ZF2 中的 hydrating 方法可以完成大部分工作(连同 Table Gateway、DAO(如Doctrine 2) 或模型的类似类),您可以为 HTML 和 JSON 创建两个单独的视图。
例如,在 Zend Framework 2 中,为您透明地选择了正确的视图,因此实际上不会有任何关于“这是 AJAX 还是不是?”的 if/else。
您应该尝试使用现代 PHP 框架(5.3+) 来了解如何使用PHP 来设计您的应用程序。