繁体   English   中英

如何在 Kohana 中包装 PHP 遗留代码?

[英]How can I wrap PHP legacy code in Kohana?

我有大量用 PHP 编写的遗留代码,这些代码不是在任何特定框架上编写的,而是主要是老式风格(即内联)PHP。 但是,我的大部分新代码都是在 Kohana 3.1.X 框架上编写的。 尽管 Kohana 确实允许遗留代码和 Kohana 文件在同一个 Web 站点上共存,但我现在想将每个遗留代码文件打包为一个视图,并充分利用 Kohana 的 MVC 设计模式和 URL 重写。 然而,我遇到的问题是我的遗留代码无法访问从视图本身(即遗留代码)中定义的全局变量,并且无法使用试图通过全局 scope 语句查看这些全局变量的内联函数。 例如:

应用程序/视图/legacy.php

$gvar = 5;

function getadminsettings(){
    global $gvar;
    echo $gvar;
}

应用程序/类/控制器/myctrl.php

...
public function action_legacy() {
    // call legacy.php as a view via View::factory()
}
...

由于我有这么多遗留代码,将所有这些遗留代码文件重构为真实视图是不切实际的。 我如何将这些文件视为视图或像访问它们一样访问它们,以便我可以从现在开始在 controller 中编写我的逻辑而不是内联(因此,遵循真正的 MVC 设计模式)然后绑定变量这些遗留文件?

我确实看过在 PHP 中,如何将程序代码包装在 class 中? 但这篇文章在这种情况下并没有真正起作用,因为我正在处理 Kohana 框架。

更新:

Kohana 似乎正在使用 output 缓冲区,这就是它无法访问旧文件中的此类全局变量的原因。 有没有人成功地在 Kohana 3.2 中获得访问全局变量的视图?

将遗留应用程序迁移到 MVC 风格的框架并不适合使用剪切和粘贴的方法。 在除了最简单的应用程序之外的任何应用程序中,都需要大量的时间和精力来重构代码以使其与 MVC 兼容。

如果您的遗留应用程序可以正常工作并且没有进行常规开发,那么切换到 MVC 将不会有什么好处。 MVC 模式通常会引入开销,主要是对开发人员而非最终用户有利。

但是,如果您的应用程序需要定期维护,您将不得不花费所需的精力来重构遗留代码以适应新方法。

我从未尝试过,但您可以尝试将代码放入 controller,而不是视图。

假设您在这里为您的 controller 使用 Controller_Template

public function action_legacy() {
    $this->auto_render = FALSE;

    include('legacy file'); 
    // you could cut and paste the legacy code here, but it might get to messy
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM