8


4

私はKohanaを使っていますが、この質問はもっと一般的なものだと思います。

私はコントローラでフォームの検証をしてきましたが、これまでのところうまくいっています。 しかし最近、私は問題に遭遇しました。

私はコメントモデルを持っていて、それにいくつかの異なるコントローラからコメントを送ります。 すべてのコントローラにバリデータを持たせるのではなく、モデルに配置しました。

これは素晴らしいです

  • 入力規則を変更/追加する場所が1か所だけ(DRY)

これは吸う

  • 私は明らかに成功または失敗をコントローラに返す必要があり、Kohanaの検証ライブラリはエラーを配列として返します。 だから私のリターンはこのようになります

成功

配列( '成功' =>真);

失敗した

配列( 'success' => false、$ errors);

私は助けることができませんが、これは間違っていると思います。 それは間違っていると感じます。

私がコントローラーでそれをするならば、私は単にすることができます

if($ post-> validate()){doWhatever(); } else {$ this-> template-> formErrors = $ post-> errors( 'form_errors'); }

これは(私には)良さそうです。

これを行うより良い方法はありますか? コントローラまたはメソッドで検証する必要がありますか? 私は夢中になりますか?

6 Answer


6


すべての検証規則がモデル内に入るとは限らない。 検証は* form (またはAPI)についてのすべてです。 事実は、あなたがあなたのデータを検証しているとき、事の大部分は context *に依存しているということです。

たとえば、これはログインしているユーザーが対応していますか? 認証レイヤと検証対象のモデルを組み合わせることはできません。 そのため、すべてのチェックはコントローラの内部で行わなければなりません。 このモデルはコンテキストに依存しません。フォームはコントローラに「所属」しており、コンテキストを認識します。

私は、正しい形式のデータを検証するための検証規則に加えて、基本的なモデル内チェックを持つことが有効な方法だと思います。 モデルのvalidate()関数内でAuth

instance()またはSession :: instance()を呼び出している場合は、間違っています。


4


私は正直なところ、あなたの方法、alexには何も問題がないと思います。 きちんとやっているようです。 あなたはDRYの原則に従っています、それは私にとってそれがMVCに関しては正しいことをしているかどうかを測定するための通常の尺度です。


2


脂肪モデル 小型コントローラ それが私がいつもやった方法です。 私への検証はデータ層にあります。 データ層は(少なくとも私にとっては)モデルです。 私は普通CakePHPを私のMVCフレームワークとして使っています…​ たぶんそれが私の検証がモデルにある理由です。 CakePHPのやり方です。


0


私は自分の気持ちを繰り返さないで、やり方をするのを好みます。 あなたが望むならビューであなたが配列からのエラーを示すことができるので配列の他に便利です。 私はkohanaを使ったことはありませんが、私がASP.NET MVCで使っていた検証方法は私に似たようなリストを提供してくれます。


0


あなたは(あなたができるならば)常にクライアント(JS)で検証するべきです。 そしてそれは迂回することができるので - あなたもサーバー上で検証します。 そうです - あなたの検証を再利用可能な形式にすることは素晴らしいアイディア


0


モデルでも検証をします。 ほとんどのモデリングライブラリはORM、Auto_Modelerなどを好みます。 検証もサポートしています。 ところでFreeNode(irc.freenode.net)で#kohanaチャンネルを頼んだ方が速いです。 我々は(通常)噛まないでください:)