5

yii で db 集約型アプリケーションを構築しています。したがって、パフォーマンスとセキュリティは当然のことです。それとは別に、フォームの検証も主要な基準です。セキュリティのために、すべての Sql クエリにパラメーター バインディングを使用する予定です。検証のために、独自の . CActiveRecord でパフォーマンスが低下することは承知しています。そこで、すべてのテーブルに対して Cmodel クラスを作成し、これらのそれぞれのモデルで検証ルールを定義し、データの取得と挿入のための SQL クエリを実行する関数も定義する予定です。Web サイトでのすべてのデータ収集は、主にフォーム (約 95%) を介して行われます。 Cformmodel を使用する必要があります。 Cmodel と Cformmodel の違いがよくわかりません。

また、XSS 攻撃を防ぐために HTML purify ラッパーをバリデーション ルールとして使用したいのですが、このラッパーのパフォーマンスが悪いとあちこちで読んだので、バリデーション ルールとして使用しても悪くなるでしょうか? また、入力を浄化しているにもかかわらず、Chtml::Encode を使用して出力テキストを表示する必要がありますか?

データを処理する私の大まかな計画は次のとおりです。

    $users= new Users() ; //Users is extending CModel , contains validation rules 
    $users=getdata(Yii->app->userid()) ; 
    if(isset('update'))
    {
        if($users->validate())
            {$users->updatedata() ; }
    }

$this->render('users','data'=>$users) 
4

4 に答える 4

4

CFormModel は CModel から継承します。CModel は単なるジェネリック モデル クラスです。CFormModel を使用してもパフォーマンスに違いはありません。CActiveRecord を使用する予定がない場合は、CFormModel の方がアプリケーションにより適しています。

「SQLクエリを実行する関数」とは、ストアドプロシージャを意味することを願っています。そうでなければ、パフォーマンスが大幅に向上することはありません。それでも、単一モデルの挿入と取得のためだけに独自のSQLクエリを作成しても、あまり役に立ちません。私のアドバイスは、後でパフォーマンスを気にすることです。本当に改善すべき点がある場合。

入力の浄化はエンコーディングとは異なり、HTML 浄化を使用して有害な html を排除し、許可したくない XSS やその他のタグを防ぎます。ただし、文字列には ( ' ) などを含めることができます。CHtml::encode が行うことは、同等の HTML を生成するだけなので、代わりに html エンティティを取得できます。

于 2012-10-06T22:07:36.197 に答える
3

最良の回答を見つけることができる yii フォーラムへのリンクを投稿しました。

Yii フォーラム リンク

CModelモデルクラスはCFormModel&の両方のベースですCActiveRecord

CActiveRecordデータベースのテーブルでCRUD操作を実行するときに使用され、それらに応じた変数定義が必要です。

CFormModelCRUD操作が必要なく、ログインフォームのような論理操作が必要な場合に使用されます。ここでは、モデルにテーブルを使用しません。

于 2012-10-08T05:02:28.050 に答える
2

これは、早期の不必要な最適化で開発をブロックしているため、早期最適化症候群と呼ばれます。

最初に、パフォーマンスやロード時間などを向上させるボトルネックと方法を探した後で、できる限り最適なモデル/スキーマを使用してアプリケーションを開発します。

于 2013-01-24T15:58:10.103 に答える
2

Yii は 2 種類のモデルを実装しています。

  1. フォームモデル
  2. アクティブなレコード。

どちらも同じ基本クラス CModel から拡張されています。フォーム モデルは CFormModel のインスタンスです。フォーム モデルは、ユーザー入力から収集されたデータを保持するために使用されます。このようなデータは、多くの場合、収集、使用された後、破棄されます。たとえば、ログイン ページでは、フォーム モデルを使用して、エンド ユーザーが提供するユーザー名とパスワードの情報を表すことができます。詳細については、フォームの操作を参照してください。

Active Record (AR) は、オブジェクト指向の方法でデータベース アクセスを抽象化するために使用される設計パターンです。各 AR オブジェクトは CActiveRecord またはその子クラスのインスタンスであり、データベース テーブルの単一の行を表します。行のフィールドは、AR オブジェクトのプロパティとして表されます。AR の詳細については、Active Record を参照してください。

ソース

于 2014-04-16T05:53:24.567 に答える