2012-08-24 20 views
6

creé un modelo yii que no tiene tabla de base de datos, pero el problema ahora es que cada vez que intento llamar a la función de modelo dentro de un archivo de vista, no se reconocecómo crear un modelo yii sin una tabla de base de datos

class blah extends CActiveRecord() 

    public static function model($className=__CLASS__) 
    { 
     return parent::model($className); 
    } 

    public function tableName() 
    { 
     return '{{UNVETTED}}'; 
    } 

    public function sayHello() 
    { 
     echo "hello world"; 
    } 
} 

mientras que dentro de la vista lo llamé como esto

blah::model()->sayHello(), y luego tiene una página en blanco de la muerte, ¿por qué?

Respuesta

7

No necesita utilizar CActiveRecord si su modelo no está asociado con una tabla de base de datos. Utilice CModel o CFormModel lugar

Por cierto, esto se soluciona:

class blah extends CActiveRecord() 

a

class blah extends CActiveRecord { 

Creo que es por eso que está recibiendo una página en blanco.

+0

¿Está bien si no implementa las reglas()? – sasori

+1

aún puede hacerlo ya que el método de reglas es CModel's: http://www.yiiframework.com/doc/api/1.1/CModel#rules-detail Si está bien o no tener reglas de validación en su modelo, - bueno, - tú decides :) – Nemoden

10

Si desea crear un modelo Yii sin una tabla, puede crearlo usando CFormModel. Tiene variables de modelo definidas, sus reglas y etiqueta de atributo.

Código de ejemplo de un formulario de contraseña de cambio creado con CFormModel.

<?php 

class ChangePassword extends CFormModel 
{ 

    public $password; 
    public $verifyPassword; 
    public $currentPassword;  

    public function rules() { 

      $rules[] = array('currentPassword', 'safe'); 
      $rules[] = array('currentPassword', 'required');    
      $rules[] = array('password, verifyPassword', 'required'); 
      $rules[] = array('verifyPassword', 'compare', 'compareAttribute' =>'password', 'message' => 'Retyped password is incorrect'); 

      return $rules; 
    } 

    /** 
    * Declares attribute labels. 
    */ 
    public function attributeLabels() { 
      return array(
        'password'=>'New password', 
        'verifyPassword'=>'Retype your new password', 
        'currentPassword'=>'Your actual password', 
      ); 
    } 

} 
Cuestiones relacionadas