2012-10-06 8 views
5

Estoy creando una aplicación intensiva de db en yii. Entonces, el rendimiento y la seguridad son naturalmente una preocupación. Aparte de esa forma, la validación es también un criterio principal. Por seguridad, planeo usar el enlace de parámetros para todas las consultas SQL. Para la validación, quiero usar los validadores proporcionados por Yii en lugar de implementar los míos. Soy consciente de que el rendimiento tiene éxito con CActiveRecord. Así que planeo hacer clases de Cmodel para todas mis tablas, definir las reglas de validación en estos modelos respectivos y también definir funciones para realizar las consultas sql para la recuperación e inserción de datos. Toda mi recopilación de datos en el sitio web se realiza principalmente a través de formularios (alrededor del 95%), si utilizo Cformmodel, realmente no entiendo la distinción entre Cmodel y Cformmodel, ¿hay algún impacto en el rendimiento al usar cualquiera de ellos?CModel vs CFormModel vs CActiveRecord

También para prevenir el ataque XSS quiero usar HTML purify wrapper como una regla de validación, ya que leo en casi todas partes que el rendimiento es malo para este contenedor, ¿va a ser malo incluso si lo uso como una regla de validación? ¿Y debería mostrar mi texto de salida usando Chtml :: Encode aunque estoy purificando la entrada?

Mi plan aproximado para hacer frente a los datos es:

$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) 

Respuesta

4

CFormModel hereda de CModel, CModel es sólo una clase de modelo genérico, no hay diferencias de rendimiento en el uso CFormModel, que es lo que le conviene más para su aplicación si no planea usar CActiveRecord.

Para 'funciones para realizar consultas SQL' espero que se refiera a procedimientos almacenados, de otro modo no hay una gran ganancia de rendimiento, incluso entonces, escribir sus propias consultas SQL solo para inserción y recuperación de modelos individuales no ayuda mucho. Mi consejo es que te importa el rendimiento más tarde. una vez que realmente tienes algo para mejorar.

purificar la entrada es diferente de la codificación, con HTML purificar elimina html dañino para evitar XSS u otras etiquetas que no desea permitir. pero una cadena todavía podría contener (') por ejemplo. lo que hace CHtml :: encode, es simplemente generar el equivalente HTML, para que pueda obtener entidades html en su lugar.

3

He publicado un enlace al foro yii donde puedes encontrar la mejor respuesta.

Yii Forum Link

CModel clase de modelo es la base tanto para CFormModel & CActiveRecord.

CActiveRecord se utiliza cuando realizo la operación CRUD con una tabla de una base de datos & necesita una definición variable de acuerdo con ellos.

CFormModel se usa cuando no necesitamos el funcionamiento de CRUD, sino una operación lógica como el Formulario de inicio de sesión. Aquí no usamos ninguna tabla para el modelo.

2

Esto se denomina síndrome de optimización prematura ya que está bloqueando su desarrollo con una optimización temprana e innecesaria.

desarrollar su aplicación en primer lugar con el mejor modelo/esquema de lo que pueda, sólo después de look para los cuellos de botella y formas de aumentar el rendimiento, el tiempo de carga, etc.

+0

Haha. No puedo estar en desacuerdo contigo por completo. Sin embargo, construí la aplicación (la pregunta ya es bastante antigua), todos usan CModel y no faltaron mucho a CActiveRecord. –

2

Yii implementa dos tipos de modelos:

  1. formulario modelo
  2. registro activo.

Ambos se extienden desde la misma clase base CModel. Un modelo de formulario es una instancia de CFormModel. El modelo de formulario se utiliza para mantener los datos recopilados de las entradas del usuario. Tales datos a menudo se recopilan, usan y luego se descartan. Por ejemplo, en una página de inicio de sesión, podemos usar un modelo de formulario para representar la información de nombre de usuario y contraseña que proporciona un usuario final. Para obtener más detalles, consulte Trabajar con el formulario

El registro activo (AR) es un patrón de diseño utilizado para abstraer el acceso a la base de datos de forma orientada a objetos. Cada objeto AR es una instancia de CActiveRecord o su clase secundaria, que representa una sola fila en una tabla de base de datos. Los campos en la fila se representan como propiedades del objeto AR. Los detalles sobre AR se pueden encontrar en Active Record.

Source

Cuestiones relacionadas