最初はV->C、C-> M、M-> Cを使用するという考えは良さそうですが、フォームを変更するには、コントローラー+モデル+ビューをいじる必要があります。アプリケーションロジックを単純に保つために、これは避ける必要があります。これは、フォーム処理ロジックを別のクラスに委任し、MVCアーキテクチャを維持してアプリケーションロジックを処理することにより、Webフォーム処理を非常に簡単に処理できるようにするフレームワークの非常に単純な拡張機能です。
処理する必要のあるフォームごとに、汎用の「webform」クラスまたはcodeigniterモデルクラスから派生したクラスを作成します。このクラスにvalidate()、process()、display()などのメソッドを追加します。
コントローラでは、コードは次のようになります。
class User_controller
{
function login()
{
$form = new LoginForm(); // this is the class you would create
if ($form->validate())
{
$data = $this->user_model->getUserData( $form->userid );
// form processing complete, use the main "user" model to fetch userdata for display,
// or redirect user to another page, update your session, anything you like
} else {
$form->display();
}
}
}
フォームクラスのdisplayメソッドは、独自のビューをロードし、必要に応じてポストバックデータを入力します。上記を使用することにより、いくつかの利点があります。
フォームの表示や処理を変更する必要がある場合は、メインコントローラーを変更する必要はありません。
ユーザーモデルを変更する必要もありません
コントローラはクリーンなままで、メインページのロジックを処理します
ユーザーモデルはクリーンなままで、データベースとのみ対話します
フレームワーク自体を更新して、Webフォームを使用してロードできるようにすることができます。
$ this-> load-> form( "login"); .....。
ただし、これはcodeigniterチームに役立つ提案にすぎません。