2012-10-06 95 views
5

我正在yii中构建一个db密集型应用程序。所以性能和安全性自然是一个问题。除此之外,表格验证也是一个主要标准。为了安全起见,我打算为所有Sql查询使用参数绑定。为了验证,我想使用由Yii提供的验证器,而不是推出自己的验证器。我知道,性能会受到CActiveRecord的影响。所以我打算为我所有的表制作Cmodel类,在这些模型中定义验证规则,并定义执行sql查询以检索和插入数据的函数。我在网站上的所有数据收集主要是通过表单(大约95%),我应该使用Cformmodel,我没有真正理解Cmodel和Cformmodel之间的区别,是否有任何性能受到影响。CModel与CFormModel与CActiveRecord

此外,为了防止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

CFormModel从CModel继承,CModel仅仅是一个通用模型类,不会有性能差异在使用CFormModel,这是什么会适合更多你的应用程序,如果你不打算使用CActiveRecord。

对于'执行SQL查询的函数',希望你的意思是存储过程,其他方面也没有那么大的性能增益,即使这样,编写自己的SQL查询只用于插入和检索单个模型也没有多大帮助。我的建议是你关心后期的表现。一旦你真的有什么需要改进的地方。

净化与编码不同的输入,使用HTML净化消除有害的html以防止XSS或其他您不想要的标记。但是一个字符串仍然可以包含(')。什么CHtml ::编码,它只是生成HTML的等价物,所以你可以获得html实体。

3

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

Yii Forum Link

CModel模型类是既CFormModel & CActiveRecord基。

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

CFormModel用于我们不需要CRUD操作而是像登录表单这样的逻辑操作。在这里,我们不使用任何表格模型。

2

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

最好的模型/方案首次开发应用程序,你可以,只认准瓶颈和方式,以提高性能,加载时间等之后

+0

哈哈。我完全不同意你的看法。但是,我确实构建了应用程序(现在的问题已经很老了),都使用CModel,并且不会错过CActiveRecord。 –

2

的Yii实现了两种模式:

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

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

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

Source