我開始使用Yii框架和gii工具爲幾個表創建crud功能。關於Yii中的CRUD生成器
問題是我通常需要修改生成的代碼。例如,我注意到所有的表單只使用文本輸入。例如,在外鍵的情況下,我需要顯示一個選擇,用戶可以選擇另一個表的寄存器而不必插入主鍵。
我完成了修改涉及的視圖(_view.php,_form.php,...)。當需要修改數據庫並重新生成代碼時,我的問題就開始了。在這種情況下,我必須逐個表格逐一更新所涉及的文件,並保留舊的更改。
它是否存在一種更好地處理這種情況的方法?
我開始使用Yii框架和gii工具爲幾個表創建crud功能。關於Yii中的CRUD生成器
問題是我通常需要修改生成的代碼。例如,我注意到所有的表單只使用文本輸入。例如,在外鍵的情況下,我需要顯示一個選擇,用戶可以選擇另一個表的寄存器而不必插入主鍵。
我完成了修改涉及的視圖(_view.php,_form.php,...)。當需要修改數據庫並重新生成代碼時,我的問題就開始了。在這種情況下,我必須逐個表格逐一更新所涉及的文件,並保留舊的更改。
它是否存在一種更好地處理這種情況的方法?
您不必這樣做。例如,您可以使用外鍵生成選擇。
<?php echo CHtml::dropDownList('ModelName[language_id]',$model->language_id,CHtml::listData(Language::model()->findAll(), 'id', 'name'), array('prompt'=>'Select Language')); ?>
第一個參數是所述選擇的名稱,第二個是值(如果更新,則該值將被選擇),第三個是數據,第四個是與HTML選項的陣列。有關更多信息CHtml::dropDownList和CHtml::listData。
在此,language_id
是外鍵,在Language
表中您有id
和name
字段。這將生成一個選擇與所有可用的語言,如下所示:1 =>英語,2 =>德國等
如果您將需要幾次crud表單的功能,顯示外鍵作爲下拉菜單,你可以創建自己的gii模板來爲你做。 Take a look at the guide知道如何去做。
GiiX extension生成關係下拉菜單。
如果您使用Gii模型生成,GiiX也會生成更好的模型。
感謝您的回答。我正在修改生成的代碼的視圖。但是,如果我必須重新生成crud代碼,這些更改將被覆蓋否? – yauros
不一定。您可以選擇重新生成哪些文件,這樣可以避免覆蓋修改後的文件。如果檢測到修改,我相信甚至會有顏色變化。 – adamors
是的你是對的,但如果例如我添加更多的列到一個表我強迫重寫受影響的文件 – yauros