2012-05-10 54 views
2

我和我的同事们决定在Yii重写一个旧版应用,但是管理层有一个严格的规定,所有的功能都必须保持原样,所以我们必须使用旧模块,直到他们移植到Yii,这些模块是以程序方式编写的,每个人都有一个包含在index.php文件中的php文件。一般的index.php有三件事:如何使用yii与遗留代码?

  • 开始会话并向其添加变量。
  • 创建数据库连接。
  • 呈现所请求模块的主要php文件。

一旦我们开始使用Yii,我们该如何使用旧模块?

我们已经看过URL Management和逻辑将是非常简单的:如果该URL的旧模块相匹配,与renderFile()使其不然,做Yii的工作,但我们不知道这是否是最好的办法。

在开始这个过程之前我们应该考虑其他什么吗?

我想知道如果URLManagement + renderFile()是要走的路吗?

+2

如果你有一个遗留的代码库,在框架上敲击不会让它变得更好。地狱..它只会增加另一层粗碎。相反,你应该慢慢地重构它。 –

回答

1

的URL处理的确可以使用的,但后来我就干脆写一个自定义URL规则类,而不是使用大量的路由作为你的配置将是一团糟。

如果你想一些替代建议:

首先,拆分出来的应用程序的创建和执行

require_once($yii); 
Yii::createWebApplication($config); 

// If you want to run the app: 
Yii::app()->run(); 

这样,你是在完全控制应用程序是否实际运行与否。

至于DB。如果你正在使用PDO,你很幸运。我会给Yii一个常规方式的db组件,然后修改general.php以使用Yii中的PDO实例(Yii :: app() - > db-> pdoInstance)。它会一直加载后,应该工作。如果你不使用PDO,只需使用2个连接,除非你有很多访问者,否则它并不是那么糟糕。

关于会话不应该有那么多的初始化,所以除非你有一个自定义的处理程序,否则将它移动到Yii。无论如何功能是一样的,所以不应该有太多问题。

再就是做事情的2种方式,因为我看到它:

1)general.php先行。

您必须在传统文件中创建模块列表,并确定当前请求的模块是否已迁移。基本上把仍然在general.php中的模块名称放在一个数组中,看看url是否需要其中的一个,并包含general.php(并且不要执行Yii :: app() - > run())。其余的都是通过Yii。

2)Yii先走了。

有yii做它的魔法,但拦截404 http异常。这很容易通过自定义错误处理函数完成(http://www.yiiframework.com/doc/guide/1.1/en/topics.error)。如果再次访问错误函数:确定它是否为有效的传统模块并包含general.php。

这两种方式都很麻烦,但至少像这样,你有机会迁移一个模块,同时保留其余的文件。

+0

谢谢,这就是我一直在寻找的东西。 –

0

根据Size ,complexity and Person Months,软件对于做出任何决定至关重要。当然,非常非常可取的是具有homogeneous性质的应用而非heterogeneous性质。如果你上面提到的模块是你打算转换的模块,我建议你必须在Yii中进行RE-DO,因为Yii具有强大的ORM模块非常容易制作。

我建议你应该去一个RE-Do

以下可能是你的兴趣 How do you convert an old OOP PHP project into the Yii Framework?

+0

我们打算重写整个应用程序,但是我们必须保留每个模块,直到它被Yii编写的模块替代,因此我们在应用程序中承担不起同质性。 –

+0

请参阅编辑的回复 –

+0

谢谢Afnan,这个链接真的很有用,但我想知道是否需要使用URLManagement + renderFile()。 –