Yii の MVC の基本に固執して、ビジネス ルールをモデル クラスに埋め込もうとしていますが、実装時に問題に直面しています。当面の問題は、ユーザーが重複したエントリを作成するのを止め、エントリがテーブルに既に存在するかどうかをチェックする関数をモデル クラスにコーディングすることです。同じモデルの基になるテーブルを照会するモデル クラスにメソッドを記述したいと考えています。新しいビジネス エンティティが存在する場合は、単純に false を返します。これをコントローラーでコーディングすると、目的の機能を実現できますが、これをモデルに保持して、モデルが使用されている場所でメソッドにアクセスし、シンコントローラーとシックモデルを指示する MVC の基本に固執できるようにしたいと考えています。前もって感謝します。
2 に答える
最善の方法は、アクティブなレコード インスタンスを (少なくとも) コントローラーで直接使用しないようにすることです。
代わりに、とインスタンス間の相互作用を含むサービスのような構造を作成する必要があります。これにより、プレゼンテーション レイヤー (ビュー、コントローラー、およびテンプレート) をモデル レイヤーからより適切に分離できます。CActiveRecord
CFormModel
このようなサービスは、それが利用するインスタンスによってスローされたエラー/例外を保持する (場合によってはそれに反応する) こともできCActiveRecord
ます。CFormModel
Cross-site Request Forgery Prevention may be what you are looking for? unless your idea of 'duplicate entries' is directly related to your business model, in which case you can override the CActiveRecord.beforeSave() and put your logic in there, if this method returns false, the record won't be saved to the database.
If you use the later method, and you want to pass the error to the view and display to the user, you can always use the CModel.addError() method, in this case in your beforeSave method.
There is another option though, which is using custom validators.
which is more appropriate? depends on your business logic.