2012-08-24 11 views
6

Stworzyłem model yii, który nie ma tabeli bazy danych, ale problem jest teraz, gdy próbowałem wywołać funkcję modelu w pliku widoku, to nie rozpoznajejak stworzyć model yii bez tabeli bazy danych

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"; 
    } 
} 

natomiast wewnątrz widoku i nazwał go jak ten

blah::model()->sayHello(), a potem mam białą stronę śmierci, to dlaczego?

Odpowiedz

7

Nie musisz używać CActiveRecord, jeśli Twój model nie jest powiązany z tabelą bazy danych. Użyj CModel lub CFormModel zamiast

BTW, to naprawić:

class blah extends CActiveRecord() 

do

class blah extends CActiveRecord { 

myślę, że to dlatego otrzymujesz białą stronę.

+0

jest w porządku, aby nie zaimplementować reguł()? – sasori

+1

nadal możesz, ponieważ metoda reguł to CModel: http://www.yiiframework.com/doc/api/1.1/CModel#rules-detail Czy wszystko jest ok czy nie, aby mieć reguły sprawdzania poprawności w swoim modelu, - cóż, - Ty decydujesz :) – Nemoden

10

Jeśli chcesz utworzyć model Yii bez tabeli, można go utworzyć przy użyciu CFormModel. Masz zdefiniować zmienne modelu, ich reguły i etykietę atrybutu.

Przykładowy kod formularza zmiany hasła utworzonego za pomocą metody 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', 
      ); 
    } 

} 
Powiązane problemy