将纯PHP项目迁移到Yii框架

将纯PHP项目迁移到Yii框架,php,frameworks,yii,Php,Frameworks,Yii,我几乎完成了一个PHP项目,使用了MVC、jQuery和Ajax。这是一个纯粹的PHP项目。我没有在代码中使用任何框架。我想改变这一点。 我做了一些研究,发现Yii是最好的框架之一 是否有可能以某种方式将纯PHP项目迁移到Yii 如果是的话,那怎么做呢?为了减少工作量并享受Yii框架带来的好处,我应该遵循哪些步骤 我是个十足的Yii新手,任何见解都值得赞赏。我不知道有什么快速的解决方案。这取决于代码是如何编写的。您拥有数据库和视图,因此当您考虑yii时,它实际上不是一个完整的新项目。Yii将为您

我几乎完成了一个PHP项目,使用了MVC、jQuery和Ajax。这是一个纯粹的PHP项目。我没有在代码中使用任何框架。我想改变这一点。 我做了一些研究,发现Yii是最好的框架之一

是否有可能以某种方式将纯PHP项目迁移到Yii

如果是的话,那怎么做呢?为了减少工作量并享受Yii框架带来的好处,我应该遵循哪些步骤


我是个十足的Yii新手,任何见解都值得赞赏。

我不知道有什么快速的解决方案。这取决于代码是如何编写的。您拥有数据库和视图,因此当您考虑yii时,它实际上不是一个完整的新项目。Yii将为您生成数据库模型。您已经拥有现有项目中的视图。编写控制器和操作,必要时修改视图

尝试这些链接,因为它们涉及相同的问题


既然您已经有了mvc中的代码,迁移起来就容易多了。然而,在迁移到Yii时,由于它可以使用gii非常容易地生成控制器和模型,所以您可以利用它

因此,首先使用gii生成控制器和模型,然后您可以将现有代码(替换我的意思是,将您的代码替换为控制器和模型中的特定功能)替换为内置控制器和模型,以便站点的功能仍然有效。您可以相应地修改视图。但这不会是一个很大的工作

您可以简单地为ajax、jquery和css注册脚本。这些也会起作用

是的,Yii是最好的框架,所以尽可能多地利用它

谢谢,
Ujjwal

TL;医生:不要这样做。这真是个可怕的主意


咆哮。。 “框架”不是一种神奇的调味品,你可以添加到一个项目中,使它更好、更闪亮。 通过一些研究,我发现Yii是最好的框架之一

你做了一项多么奇怪的研究。。我想看看材料。特别是,因为我会把它列为第三差的PHP框架。只有CodeIgniter和CakePHP在它的可怕性方面超越了它

其原因是代码质量极差,这个框架显示的代码质量,再加上糟糕的实践,使其永久化

为什么要避免移民? 从您的描述中可以明显看出,您不熟悉这个框架,并且以前没有使用它的经验

在项目管理中,有一个主题:。在这种情况下,在项目的最后阶段添加一个以前未使用过的框架将很有可能构成一种高影响风险,由于项目的sage,这种风险也完全没有缓解

这意味着有很好的机会出现问题。当它这样做的时候,很可能会使项目失败。或者至少将发布数据向后推一段相当长的时间

在一个完美的世界里,框架被用来简化重复的开发任务,但要牺牲一些性能。这些是您在项目开始时执行的任务。你不是在一个项目的开始。这意味着你将不会从这个“策略”中获益

为什么不呢? 正如我之前提到的,不仅有避免向现有项目添加框架的原因,还有避免使用Yii的原因

遗产噩梦 你们所有的控制器都会扩展类,它会扩展,它会扩展

你所有的“模型”都会扩展到以太或者以太,以太会扩展,以太会扩展

这两个链都包含静态变量,并在大量不同的其他类上执行静态方法。这些因素的组合将使调试变得极其困难和乏味

全球国家 全球国家有几种形式。PHP中的人们通常知道的是
global
变量。但这不是唯一的形式。每当您有一个包含
静态
变量的类时,它也会创建一个全局状态,它会(几乎总是会)导致看似不相关的实例神秘地交互

使用全局状态是一个核心机制。您将在整个代码库中看到静态调用,如果没有全局状态,Yii将无法运行

每次打电话时,您都在访问和/或更改它

这使得Yii应用程序无法进行单元测试。调试变成了在整个项目中使用
grep
的练习

紧耦合 在Yii中创建应用程序时。它变得与它息息相关。如果不启动完整的框架,则无法执行应用程序的部分内容。主要是由于静态调用,最终添加到代码中

每次在自己的代码中添加静态调用时,该代码段都会与类的名称绑定。这本质上是紧密耦合

正如您可能已经注意到的(希望如此),有另一种方法可以实现相同的效果-使用
new
操作符。这是将您的一些代码耦合到类的特定名称的另一种方法

没有接口。。没有一个不管怎样 无论Yii项目的配置有多糟糕,配置文件都是一个很好的姿态。引入外部代码并替换如此混乱的代码库中现有组件的最无害的方法

但不幸的是,它带来了由于缺乏接口和现有耦合而引起的问题

开发人员将尝试替换的组件之一是。主要是由于您如何传递附加参数

OOP中的接口指定两个实例之间的约定。它允许您定义实例的功能,以及其他人可以使用的方法。当它不存在时,在一个大的代码库中,你是lef