2012-10-06 145 views
5

我正在yii中構建一個db密集型應用程序。所以性能和安全性自然是一個問題。除此之外,表格驗證也是一個主要標準。爲了安全起見,我打算爲所有Sql查詢使用參數綁定。爲了驗證,我想使用由Yii提供的驗證器,而不是推出自己的驗證器。我知道,性能會受到CActiveRecord的影響。所以我打算爲我所有的表製作Cmodel類,在這些模型中定義驗證規則,並定義執行sql查詢以檢索和插入數據的函數。我在網站上的所有數據收集主要是通過表單(大約95%),我應該使用Cformmodel,我沒有真正理解Cmodel和Cformmodel之間的區別,是否有任何性能受到影響。CModel與CFormModel與CActiveRecord

此外,爲了防止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

CFormModel從CModel繼承,CModel僅僅是一個通用模型類,不會有性能差異在使用CFormModel,這是什麼會適合更多你的應用程序,如果你不打算使用CActiveRecord。

對於'執行SQL查詢的函數',希望你的意思是存儲過程,其他方面也沒有那麼大的性能增益,即使這樣,編寫自己的SQL查詢只用於插入和檢索單個模型也沒有多大幫助。我的建議是你關心後期的表現。一旦你真的有什麼需要改進的地方。

淨化與編碼不同的輸入,使用HTML淨化消除有害的html以防止XSS或其他您不想要的標記。但是一個字符串仍然可以包含(')。什麼CHtml ::編碼,它只是生成HTML的等價物,所以你可以獲得html實體。

3

我發佈了一個yii論壇的鏈接,您可以在這裏找到最佳答案。

Yii Forum Link

CModel模型類是既CFormModel & CActiveRecord基。

CActiveRecord用於我們使用數據庫表&執行CRUD操作時需要根據它們進行變量定義。

CFormModel用於我們不需要CRUD操作而是像登錄表單這樣的邏輯操作。在這裏,我們不使用任何表格模型。

2

這被稱爲過早優化綜合症,因爲您正在通過早期和不必要的優化阻止您的發展。

最好的模型/方案首次開發應用程序,你可以,只認準瓶頸和方式,以提高性能,加載時間等之後

+0

哈哈。我完全不同意你的看法。但是,我確實構建了應用程序(現在的問題已經很老了),都使用CModel,並且不會錯過CActiveRecord。 –

2

的Yii實現了兩種模式:

  1. 表格模型
  2. 活動記錄。

兩者都從相同的基類CModel擴展。表單模型是CFormModel的一個實例。表單模型用於保存從用戶輸入中收集的數據。這些數據經常被收集,使用並丟棄。例如,在登錄頁面上,我們可以使用表單模型來表示由最終用戶提供的用戶名和密碼信息。有關詳細信息,請參閱使用表格

活動記錄(AR)是一種用於以面向對象的方式抽象數據庫訪問的設計模式。每個AR對象是CActiveRecord或其子類的實例,表示數據庫表中的單個行。行中的字段表示爲AR對象的屬性。有關AR的詳細信息可以在Active Record中找到。

Source