2012-05-30 72 views
2

我開始使用Yii框架和gii工具爲幾個表創建crud功能。關於Yii中的CRUD生成器

問題是我通常需要修改生成的代碼。例如,我注意到所有的表單只使用文本輸入。例如,在外鍵的情況下,我需要顯示一個選擇,用戶可以選擇另一個表的寄存器而不必插入主鍵。

我完成了修改涉及的視圖(_view.php,_form.php,...)。當需要修改數據庫並重新生成代碼時,我的問題就開始了。在這種情況下,我必須逐個表格逐一更新所涉及的文件,並保留舊的更改。

它是否存在一種更好地處理這種情況的方法?

回答

1

您不必這樣做。例如,您可以使用外鍵生成選擇。

<?php echo CHtml::dropDownList('ModelName[language_id]',$model->language_id,CHtml::listData(Language::model()->findAll(), 'id', 'name'), array('prompt'=>'Select Language')); ?> 

第一個參數是所述選擇的名稱,第二個是值(如果更新,則該值將被選擇),第三個是數據,第四個是與HTML選項的陣列。有關更多信息CHtml::dropDownListCHtml::listData

在此,language_id是外鍵,在Language表中您有idname字段。這將生成一個選擇與所有可用的語言,如下所示:1 =>英語,2 =>德國等

+0

感謝您的回答。我正在修改生成的代碼的視圖。但是,如果我必須重新生成crud代碼,這些更改將被覆蓋否? – yauros

+0

不一定。您可以選擇重新生成哪些文件,這樣可以避免覆蓋修改後的文件。如果檢測到修改,我相信甚至會有顏色變化。 – adamors

+0

是的你是對的,但如果例如我添加更多的列到一個表我強迫重寫受影響的文件 – yauros

1

如果您將需要幾次crud表單的功能,顯示外鍵作爲下拉菜單,你可以創建自己的gii模板來爲你做。 Take a look at the guide知道如何去做。

0

對於這個功能,你需要開發你的gii工具,它將繼承現有的gii工具的功能,意味着在創建CRUD時對現有類進行一些修改。這是您的具體要求,gii工具只提供適合所有用戶的一般功能。

+0

Thx給大家我會看看關於擴展其功能的gii指南 – yauros

+1

這已經在giix擴展中完成了。看到我的答案。 – jmclem

2

GiiX extension生成關係下拉菜單。

如果您使用Gii模型生成,GiiX也會生成更好的模型。