关于Yii的CRUD发生器

时间:2012-05-30 08:45:04

标签: yii crud scaffolding

我开始使用Yii框架和gii工具为几个表创建crud功能。

问题是我通常需要修改生成的代码。例如,我注意到所有表单只使用文本输入。例如,在外键的情况下,我需要显示一个select,用户可以在其中选择另一个表的寄存器而无需插入主键。

我实现了修改所涉及的视图(_view.php,_form.php,...)。当需要修改数据库并再次重新生成代码时,我的问题就出现了。对于那种情况,我必须逐个表,逐个更新所涉及的文件,保持我原来的变化。

是否存在更好地处理这种情况的方法?

4 个答案:

答案 0 :(得分:2)

GiiX extension生成关系的下拉列表。

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

答案 1 :(得分:1)

你不必这样做。例如,您可以使用外键生成一个选择。

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

第一个参数是select的名称,第二个是值(如果你正在更新,将选择值),第三个是数据,第四个是带有html选项的数组。有关CHtml::dropDownListCHtml::listData的更多信息。

在此,language_id是外键,Language表中有idname字段。这将生成包含所有可用语言的选择,如下所示:1 =&gt;英语,2 =&gt;德国等。

答案 2 :(得分:1)

如果你需要多次生成crud表单的功能,可以选择显示外键作为下拉列表,你可以创建自己的gii模板来为你完成。 Take a look at the guide知道如何做到这一点。

答案 3 :(得分:0)

对于此功能,您需要开发gii工具,该工具将继承现有gii工具的功能,这意味着在创建CRUD时对现有类进行一些修改。这是您的特定要求,gii工具仅提供适合所有用户的一般功能。