CModel vs CFormModel vs CActiveRecord



我正在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) 

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

对于"执行sql查询的函数"(希望您指的是存储过程),从其他方面来说,性能并没有太大的提高,即使这样,编写自己的sql查询只用于插入和检索单个模型也没有多大帮助。我的建议是,一旦你真的有需要改进的地方,你就应该关心以后的表现。

净化输入与编码不同,使用HTML净化可以消除有害的HTML,以防止XSS或其他您不想允许的标记。但是字符串仍然可以包含(')。CHtml::encode所做的只是生成等价的HTML,这样您就可以获得HTML实体。

我发布了一个链接到yii论坛,在那里你可以找到最佳答案。

Yii论坛链接

CCD_ 1模型类是CCD_;CActiveRecord

当我们对数据库的表执行CRUD操作时使用CCD_ 4;需要根据它们进行变量定义。

CFormModel是在我们不需要CRUD操作而是像LoginForm这样的逻辑操作时使用的。

这被称为过早优化综合症,因为你用早期和不必要的优化阻碍了你的开发。

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

Yii实现了两种模型:
  1. 表单模型
  2. 活动记录

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

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

最新更新