2012-08-24 7 views
6

मैंने एक वाईआई मॉडल बनाया है जिसमें डेटाबेस तालिका नहीं है, लेकिन समस्या अब है, जब भी मैंने एक दृश्य फ़ाइल में मॉडल फ़ंक्शन को कॉल करने का प्रयास किया, तो यहडेटाबेस तालिका के बिना yii मॉडल बनाने के लिए कैसे करें

को पहचान नहीं पाया
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"; 
    } 
} 

जबकि दृश्य के अंदर मैं इस

blah::model()->sayHello() है जैसे कि यह कहा जाता है, और फिर मैं मौत का एक सफेद पेज मिला, यही कारण है कि है?

उत्तर

7

यदि आपका मॉडल डेटाबेस तालिका से संबद्ध नहीं है तो आपको CActiveRecord का उपयोग करने की आवश्यकता नहीं है। का प्रयोग करें CModel या CFormModel बजाय

Btw, इसे ठीक:

class blah extends CActiveRecord() 

class blah extends CActiveRecord { 

लिए मुझे लगता है कि यही कारण है कि आप एक सफेद पेज हो रही है है।

+0

नियमों() को लागू नहीं करना ठीक है? – sasori

+1

आप अभी भी इसके लिए कर सकते हैं क्योंकि नियम विधि सीएमओडेल है: http://www.yiiframework.com/doc/api/1.1/CModel#rules-detail चाहे यह ठीक है या आपके मॉडल पर सत्यापन नियम नहीं है, - ठीक है, - आप तय करें :) – Nemoden

10

यदि आप तालिका के बिना वाईआई मॉडल बनाना चाहते हैं तो इसे CFormModel का उपयोग करके बनाया जा सकता है। आपने मॉडल चर, उनके नियम और विशेषता लेबल को परिभाषित किया है।

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', 
      ); 
    } 

} 
संबंधित मुद्दे