5

我正在 yii 中构建一个数据库密集型应用程序。所以性能和安全自然是一个值得关注的问题。除此之外,表单验证也是一个主要标准。为了安全起见,我计划对所有 Sql Queries 使用参数绑定。对于验证,我想使用 Yii 提供的验证器,而不是推出我自己的 . 我知道性能会受到 CActiveRecord 的影响。所以我计划为我的所有表创建 Cmodel 类,在这些各自的模型中定义验证规则,并定义函数来执行用于检索和插入数据的 sql 查询。我在网站上收集的所有数据主要是通过表单(大约 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 只是一个通用的 Model 类,使用 CFormModel 没有性能差异,如果您不打算使用 CActiveRecord,这将更适合您的应用程序。

对于“执行 sql 查询的函数”,希望您指的是存储过程,否则不会有那么大的性能增益,即使那样,编写自己的 SQL 查询仅用于插入和检索单个模型也无济于事。我的建议是你以后关心性能。一旦你真的有需要改进的地方。

净化输入不同于编码,使用 HTML 净化可以消除有害的 html 以防止 XSS 或其他您不想允许的标签。但例如,字符串仍可能包含 ( ' )。CHtml::encode 做了什么,它只是生成 HTML 等价物,以便您获得 html 实体。

于 2012-10-06T22:07:36.197 回答
3

我已经发布了一个指向 yii 论坛的链接,您可以在其中找到最佳答案。

Yii 论坛链接

CModel模型类是CFormModel&的基础CActiveRecord

CActiveRecord当我们对数据库表执行 CRUD 操作并需要根据它们定义变量时使用。

CFormModel当我们不需要 CRUD 操作而是像登录表单这样的逻辑操作时使用。这里我们没有为模型使用任何表格。

于 2012-10-08T05:02:28.050 回答
2

这被称为过早优化综合症,因为您正在通过早期和不必要的优化来阻止您的开发。

首先使用最好的模型/模式开发您的应用程序,只有在寻找瓶颈和提高性能、加载时间等的方法之后。

于 2013-01-24T15:58:10.103 回答
2

Yii 实现了两种模型:

  1. 表格模型
  2. 活动记录。

两者都从同一个基类 CModel 扩展而来。表单模型是 CFormModel 的一个实例。表单模型用于保存从用户输入收集的数据。这些数据经常被收集、使用然后丢弃。例如,在登录页面上,我们可以使用表单模型来表示最终用户提供的用户名和密码信息。有关详细信息,请参阅使用表单

Active Record (AR) 是一种设计模式,用于以面向对象的方式抽象数据库访问。每个 AR 对象都是 CActiveRecord 或其子类的一个实例,代表数据库表中的一行。行中的字段表示为 AR 对象的属性。有关 AR 的详细信息可以在 Active Record 中找到。

来源

于 2014-04-16T05:53:24.567 回答