CModel与CFormModel对比CActiveRecord

Var*_*ain 5 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) 
Run Code Online (Sandbox Code Playgroud)

Asg*_*oth 4

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

对于“执行 sql 查询的函数”,希望您指的是存储过程,否则不会有那么大的性能提升,即使如此,编写自己的 SQL 查询仅用于插入和检索单个模型也没有多大帮助。我的建议是你稍后关心性能。一旦你确实有需要改进的地方。

净化输入与编码不同,通过 HTML 净化,您可以消除有害的 html,以防止 XSS 或其他您不想允许的标签。但例如,字符串仍可以包含 ( ' )。CHtml::encode 的作用是生成 HTML 等效项,以便您获得 html 实体。