CodeIgniterでコントローラコードを膨らませないようにするには?

コントローラは、ユーザの入力と出力を処理するMVCパターンを持っています。したがって、入力検証と応答準備はコントローラで行う必要があります。

例えば、私はコントローラメソッド "save"を持っています:

  • 入力データを探します
  • データでバリデータを実行する
  • 入力が有効で、適切なモデルをロードし、フィールドを入力値に設定し、 save()メソッドを呼び出す場合
  • 入力が無効で、編集フォームを再読み込みするためのデータを準備し、フォームを表示します

すべてのこのシーケンスは、線形コードのかなりの混乱を作成します。私は何とかそれを分離したいと思います。検証部分をモデルに移動しますか?間違っている?入力を処理する特別な "ライブラリ"クラスを作成しますか?

Asp.Net MVCでは、これは "オブジェクトバインダー"パターンを実装しているので、これより優れています。したがって、検証とモデルフィールドのバインドがなくなり、コントローラが大幅に軽量化されます。 CodeIgniterに類似したものはありますか?

2

2 答え

コントローラーがバリデーションを行うことは広く受け入れられていません。私は、モデルを「太ったままにして、コントローラーを薄くして、馬鹿にします」というモデルでモデル化します。

それは有効な電話番号などがビジネスロジックに依存しているので、モデルでそれを持つことは意味があります。

2
追加された
これは有効な点として聞こえます。私はモデルクラスが「無効な」状態にあるかもしれないという考えを採用する必要があります。私は、それが「正当な対象」であることが分かっているときだけ、常にモデルクラスを構築しようとしました。
追加された 著者 naivists,
"入力抽出"と検証をモデルクラスに移動しようとしました。かなり良い見えます、ありがとう!
追加された 著者 naivists,
コントローラは、入力があったかどうかをチェックして、モデルがロードされていない場合は、モデルの読み込み(およびデータベースの初期化)の手間を省くことができます。しかし、実際の検証は実際にはドメイン/ビジネスロジックに依存しているため、私にとっては、それをモデル化するのが理にかなっています。しかし、これについてコンセンサスはないので、あなたは自分に合っている必要があります。 :)
追加された 著者 Esailija,

できる限りあなたのモデルに多くのロジックを入れないようにしてください。コントローラは、実際にサービスを開始し、ビューのデータを準備するために使用する必要があります。

あなたは、再利用可能なコード、つまりバリデータ、フィルタなどを再利用する必要があります。

1
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com