CModel与CFormModel对比CActiveRecord

时间:2012-10-06 20:50:38

标签: php yii yii-cmodel yii-cformmodel

我正在yii中构建一个数据库密集型应用程序。因此,性能和安全性自然是一个问题。除此之外,表格验证也是一个主要标准。为了安全起见,我计划对所有Sql查询使用参数绑定。为了验证,我想使用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 个答案:

答案 0 :(得分:4)

CFormModel继承自CModel,CModel只是一个通用的Model类,使用CFormModel没有性能差异,如果您不打算使用CActiveRecord,这将更适合您的应用程序。

对于'执行sql查询的函数',希望你的意思是存储过程,否则就没有那么大的性能增益,即使这样,编写自己的SQL查询只是为了插入和检索单个模型也无济于事。我的建议是你关心后者的表现。一旦你真的有需要改进的地方。

将输入与编码区分开来,使用HTML自动消除有害的html以防止XSS或其他您不想允许的标记。但是字符串仍然可以包含(')。什么是CHtml :: encode,它只是生成HTML等价物,所以你得到了html实体。

答案 1 :(得分:3)

我已经发布了yii论坛的链接,您可以找到最佳答案。

Yii Forum Link

CModel模型类是CFormModel&的基础。 CActiveRecord

当我们使用数据库表和数据表执行CRUD操作时,使用

CActiveRecord。根据它们需要变量定义。

当我们不需要CRUD操作但是像Login Form这样的逻辑操作时,使用

CFormModel。这里我们不为模型使用任何表格。

答案 2 :(得分:2)

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

首先使用最佳模型/架构开发应用程序,只有在查找瓶颈以及提高性能,加载时间等方法之后。

答案 3 :(得分:2)

Yii实现了两种模型:

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

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

    Source