2014-02-18 39 views
0

嗨我想在YII視圖中創建一個聯繫表單。我正在使用CACtive表單,但問題是它需要一個模型,我沒有模型,我只是在沒有任何模型的情況下調用一個視圖。下面 是我的代碼Yii Cactive表格

$form = $this->beginWidget('CActiveForm', array(
     'id'=>'fundraising-form', 
     'enableAjaxValidation'=>false, 
     'clientOptions'=>array(
     'validateOnSubmit'=>true, 
     'hideErrorMessage'=>true, 
    ), 
     'enableClientValidation'=>true, 
     'focus'=>array($model,'name'), 
      )); 
    echo $form->labelEx('name_of_organization'); 

給我的錯誤 缺少論據2 CActiveForm :: labelEx(),

+0

據我所知,你必須同時用'CActiveForm'交互使用'AR'模型,你沒有一個模式? –

+0

不使用模型的原因是什麼? –

+0

我不需要這裏的模型 – baig772

回答

1

嗯,如果我猜得不錯,你沒有任何表來存儲您的數據,而且您不需要模型和數據庫之間的任何交互,並且只需要使用ActiveForm功能,而無需使用模型。這是不可能。但是解決這個問題有一個竅門。您可以輕鬆創建一個假模型並將其用於ActiveForm

首先,在您的模型目錄中創建一個模型,但不是普通模型。如下圖所示:

class FakeModel extends CFormModel{ 
public $organizationName; //for example! 
public $fullname; // for example!! 
public $email; // for example!!! 
public function rules() { 
    return array(
     array('email','email'), 
     array('fullname,organizationName','required') 
    ); 
} 

public function attributeLabels() { 
    return array(
     'email'=>'E-Mail Address', 
     'organizationName'=>'Organization Name', 
     'fullname'=>'Full Name', 
    ); 
} 
} 

需要注意的是,FakeModel擴展CFormModel類。

嗯,現在你有一個模型就像其他AR的模型:)你可以發送這個模型到你的ActiveForm,甚至在你的模型中執行驗證。

$fakeModel=new FakeModel(); 
//for validation 
if($fakeModel->validate()){ 
// SEND EMAIL FOR EXAMPLE 
} 

正如你所看到的,有你的ActiveForm數據庫之間沒有相互作用。在您的CActiveForm中輕鬆通過$fakeModel作爲model(第二個參數)。

UPDATE 正如您可能知道的,真名是'CFormModel'。

我希望它能幫助:)

+2

做了同樣的方式,創建了一個假模型:) – baig772

+0

當然,這不是一個真正的假模型,但Yii稱之爲表單模型。 – jmarkmurphy

+0

@jmarkmurphy definitly你是對的。但我只是用這種方式提到它是一個假模型,它不與db進行交互。感謝您的關注 –