AJAXリクエストの場合でも、入力を検証する必要があります。アプリに(AJAXを介して)入力を送信するのではなく、信頼できないブラウザーです。
一般的な設計原則として、特別な場合は避けてください(ここでは、ajaxとnon-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にあるようなハイドレイティングアプローチがほとんどのジョブを実行できます(Table Gateway、DAOと一緒に( Doctrine 2)、またはモデルの同様のクラス)、およびHTMLとJSONの2つの別個のビューを作成できます。
たとえば、Zend Framework 2では、適切なビューが透過的に選択されるため、「これはAJAXであるかどうか」に関するif/elseは実際にはありません。
最新のPHPフレームワーク(5.3以降)を試して、PHPでアプリの設計にアプローチする方法を理解する必要があります。