4

当我更深入地研究 Yii 时,我现在想知道是否依赖 Gii 和 Giix 来生成我的模型和“管理员”CRUD 可能是一个拐杖而不是一个节省时间的工具。很多时候,在小型项目的开始阶段,它可以帮助我更快地进行,让我专注于数据库设计。但是,每当我对表结构或关系进行更改时,我发现自己不得不依靠 GiiX 重新生成模型。在我这样做之前,我总是复制我编写的模型部分,以便以后可以将其粘贴到更新的模型中。这似乎是一件乏味的事情,我现在想知道它是否节省了我任何实际时间。我有几个问题:

  1. 特别是对于 Yii 用户,一旦你已经使用 Yii 一段时间了,你还会为 Gii 或 GiiX 烦恼吗?你是因为它不再有用,还是因为它是一根拐杖而放弃使用它?您是否致力于编写自己的代码生成和脚手架工具?
  2. 对于所有编码人员,您是否觉得在学习新的语言或框架时应该避免使用代码生成工具?

我希望有一种有效的方法来使用 Gii 和其他代码生成工具,即使在多次更新表结构并用我自己的代码编写之后,也无需复制和粘贴以及跟踪什么是什么。

请让我知道你的想法!

4

3 回答 3

7

Gii 可用于生成初始样板代码和目录结构。

随着项目的进行,我使用 Gii 提供的差异在我的模型类文件中添加相关的新代码片段。假设您修改了一个表。转到 Gii 并尝试生成模型。您将收到模型类文件存在的通知。此外,您将在弹出窗口中看到为您提供差异的链接。

于 2012-03-28T05:34:31.287 回答
4

我不知道 Yii 是否可行,但是使用我使用的另一个框架,我们扩展了模型类并将我们的自定义代码放入这些扩展类中。在应用程序中,我们只引用扩展类,而不是基础(生成)模型类。

由于我们没有将任何自定义代码放入基本模型类中,因此可以重新生成它们而无需担心覆盖任何自定义代码。

于 2012-03-28T04:25:44.253 回答
1

但是,每当我对表结构或关系进行更改时,我发现自己不得不依靠 GiiX 重新生成模型。

你真的不需要那个。Yii 设计使您的所有表格字段都可用作模型中的属性。这样,如果您在 TableA 中添加一个新的 fieldX,您可以立即使用 $modelA->fieldX。您不需要对模型进行任何升级。Yii“知道”你改变了桌子。

看:

“虽然我们从未在 Post 类中显式声明 title 属性,但我们仍然可以在上面的代码中访问它。这是因为 title 是 tbl_post 表中的列,而CActiveRecord 借助 PHP 将其作为属性访问__get() 魔术方法。如果我们尝试以相同的方式访问不存在的列,则会引发异常。

来源:http ://www.yiiframework.com/doc/guide/1.1/en/database.ar

For Yii users specifically, once you've been doing Yii for a while do you even bother with Gii or GiiX? Did you quit using it because it was no longer useful, or because it was a crutch? Did you work on writing your own code generation and scaffolding tools?

我在所有项目中都使用 Gii 来生成大部分模型或 CRUD。这是非常有用的。我可以按照我想要的方式自定义生成的代码。我什至对 Gii 生成器的“骨架”进行了一些自定义,以便生成的代码是我的语言,而不是英语,并且我需要更多的方法/属性。

For all coders, do you feel code generation tools should be avoided when learning a new language or framework?

不,海事组织。生成的代码是另一种学习方式。

于 2012-03-28T05:35:12.013 回答