我正在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)
答案 0 :(得分:4)
CFormModel继承自CModel,CModel只是一个通用的Model类,使用CFormModel没有性能差异,如果您不打算使用CActiveRecord,这将更适合您的应用程序。
对于'执行sql查询的函数',希望你的意思是存储过程,否则就没有那么大的性能增益,即使这样,编写自己的SQL查询只是为了插入和检索单个模型也无济于事。我的建议是你关心后者的表现。一旦你真的有需要改进的地方。
将输入与编码区分开来,使用HTML自动消除有害的html以防止XSS或其他您不想允许的标记。但是字符串仍然可以包含(')。什么是CHtml :: encode,它只是生成HTML等价物,所以你得到了html实体。
答案 1 :(得分:3)
我已经发布了yii论坛的链接,您可以找到最佳答案。
CModel
模型类是CFormModel
&的基础。 CActiveRecord
。
CActiveRecord
。根据它们需要变量定义。
CFormModel
。这里我们不为模型使用任何表格。
答案 2 :(得分:2)
这称为早熟优化综合症,因为您通过早期和不必要的优化来阻止您的开发。
首先使用最佳模型/架构开发应用程序,只有在查找瓶颈以及提高性能,加载时间等方法之后。
答案 3 :(得分:2)
Yii实现了两种模型:
两者都从相同的基类CModel扩展。表单模型是CFormModel的一个实例。表单模型用于保存从用户输入收集的数据。经常收集,使用然后丢弃这些数据。例如,在登录页面上,我们可以使用表单模型来表示最终用户提供的用户名和密码信息。有关详细信息,请参阅使用表单
Active Record(AR)是一种用于以面向对象的方式抽象数据库访问的设计模式。每个AR对象都是CActiveRecord或其子类的实例,表示数据库表中的单个行。行中的字段表示为AR对象的属性。有关AR的详细信息,请参阅Active Record。