2014-03-28 81 views
0

這將是一個普遍的問題裏面,具體(約Yii的),使用其他模型的模型

我只是想知道這是否是一個很好的做法,或只是如果它的正確:

在我的_form視圖,我正在調用另一個模型,而不是使用當前模型;

// @model Clients 
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'myid-form', 
'enableAjaxValidation'=>false, 
)); ?> 

<div class="row"> 
    <?php echo $form->labelEx($model,'Debtor'); ?> 
    <?php echo $form->dropDownList($model, 'Debtor' 
     , CHtml::listData(Debtor::model()->findAll(), 'DebtorCode', 'DebtorDesc'),array('empty'=>'(Select Debtor)')); ?> 
    <?php echo $form->error($model,'Debtor'); ?> 
</div> 

如果我錯了,誰能告訴我什麼是正確的方式,它成爲一種習慣之前..

TIA

回答

1

我覺得你的問題是不正確的。您正在詢問如何在模型中調用另一個模型。但是你提供的代碼,你正在視圖中使用另一個模型。顯然,一個觀點不是一個模型。
也許你的問題是「我可以在視圖中使用另一個模型,除了使用其他模型的yii生成代碼」。
回答您的問題:是的,你可以這樣使用它,如果你談論使用模型沒有什麼不對。 但是你已經在你的視圖中編寫了一個DB代碼(findAll),這不是一個好的做法.Yii是一個MVC框架,其基本主題是分離演示文稿和數據訪問。是的,你可以做到這一點Yii不會反對Yii哲學。其次,如果你在視圖中訪問Db,那麼你的代碼不再是「非常好的可管理代碼」。這將是一個平均代碼,因爲在您的視圖中使用Db訪問,您或其他編碼人員很難確定正在進行的操作以及如何在需要時修改代碼。
您可以編寫代碼在你的控制器一樣

$debtor=Debtor::model()->findAll(); 
$debtorList=CHtml::listData($debtor,'DebtorCode','DebtorCode'); 
$this->render('my _form',array('debtorList'=>$debtorList)); 

在你看來,你中央社使用它像

<?php echo $form->dropDownList($model, 'Debtor' 
     , $debtorList,array('empty'=>'(Select Debtor)')); ?> 
相關問題