【问题标题】:How to use yii with legacy code?如何在遗留代码中使用 yii?
【发布时间】:2012-05-10 15:24:03
【问题描述】:

我和我的同事团队决定在 Yii 中重写旧版应用程序,但管理层有严格的政策,所有功能必须保持原样,所以我们必须使用旧模块,直到它们被移植到 Yii,这些模块以程序方式编写,每个模块都有一个包含在一般 index.php 中的 php 文件。一般的 index.php 做了三件事:

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

我们开始使用 Yii 后如何使用旧模块?

我们查看了URL Management,逻辑非常简单:如果 url 匹配旧模块,则使用 renderFile() 渲染它,否则让 Yii 工作,但我们不知道这是否是最好的方法。

在开始这个过程之前我们是否应该考虑其他任何事情?

我想知道 URLManagement + renderFile() 是否可行?

【问题讨论】:

  • 如果你有一个遗留的代码库,在一个框架上拍打不会让它变得更好。地狱..它只会添加另一层污垢。相反,您应该开始慢慢重构它。

标签: php yii legacy


【解决方案1】:

确实可以使用 URL 处理,但是我会简单地编写一个自定义 URL 规则类而不是使用大量路由,因为您的配置会一团糟。

如果您想要一些替代建议:

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

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

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

这样您就可以完全控制应用程序是否实际运行。

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

关于 session 不应该有太多的初始化,所以除非你有一个自定义的处理程序,否则也将它移动到 Yii。反正功能都是一样的,应该不会有太大问题。

在我看来,有两种做事方式:

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。

这两种方式都相当混乱,但至少像这样您有机会迁移一个模块,同时将其余模块保留在旧文件中。

【讨论】:

  • 谢谢,这就是我要找的。​​span>
【解决方案2】:

依赖于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?

【讨论】:

  • 我们计划重写整个应用程序,但我们必须保留每个模块,直到它被用 Yii 编写的模块替换,因此我们还不能在我们的应用程序中提供同质性。
  • 谢谢 Afnan,这个链接真的很有用,但我想知道 URLManagement + renderFile() 是否可行。
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多