1

我们有一个非常古老的遗留代码库,它使用全局变量,就像它们已经过时一样——几乎所有的页面间通信都是通过全局变量和会话或两者来完成的。这可以作为最后的手段进行更改,但理想情况下我不想触摸它,因为我触摸的所有东西都可能引入更多错误:-p。

无论如何,我们正在将一个新的“模块”合并到完全用 zend 编写的应用程序中,它非常好且模块化。我的目标是让zend作为主干运行,旧的遗留代码作为zend中的一种模块/控制器运行,一旦它获得控制权,就可以正常执行并做任何它想做的事情。

我有两个问题:

  • 我需要让 Zend 看到我正在使用旧 URL(login.php、show.php 等)并将执行传递给特定的控制器;

  • 我将整个应用程序嵌入到另一个函数中,这破坏了作为全局变量出现在全局范围中的变量的默认行为 - 即它们现在只是此方法的局部变量,因此如果不先指定就无法看到他们是全球性的。

如果有另一种方法可以做到这一点,我会很高兴听到它:-p

干杯,
克里斯

4

3 回答 3

2

对于第一个问题,我认为您可以使用 Zend_Router 类。

但尽管如此,我认为将程序应用程序移植到 ZF 概念(这是一个面向对象的概念)并不是一个好主意。

我要么重写应用程序,要么只使用单独的类作为松散组件,这也是 ZF 创建者推荐的。

于 2009-06-09T11:18:38.203 回答
1

对于遗留代码库,我的建议是利用您的APACHE 重写规则。通常,zend 框架会按照以下方式进行重写:

  <Location />
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} -s [OR]
        RewriteCond %{REQUEST_FILENAME} -l [OR]
        RewriteCond %{REQUEST_FILENAME} -d
        RewriteRule ^.*$ - [NC,L]
        RewriteRule ^.*$ /index.php [NC,L]
    </Location>

而是将“index.php”更改为当前未使用的内容,例如“ZendFramework.php”。将正常内容(定义 APPLICATION_ENV、APPLICATION_PATH、引导程序等)放入这个 ZendFramework.php 文件。

现在您的服务器仍将像以前一样提供所有现有的遗留代码,但您将不存在的路径(例如 /module/controller/action)路由到 Zend。根据您的旧代码库,您可能会在路径中遇到一些冲突,您必须在命名模块/控制器/操作和自定义路由时处理这些冲突。随着时间的推移,您可以将遗留代码移动到 ZendFramework 模块中。

        RewriteRule ^.*$ /ZendFramework.php [NC,L]
于 2012-05-10T18:06:14.687 回答
0

原来我的野心太大了;

我意识到新的“模块”主要是 JavaScript 和一个由大量 ZF 支持的小 PHP 控制器(CRUD),而我真正想要的只是移植 JS 前端——实际上没有人关心后端是如何实现的.

我决定简单地移植 JS 前端,只提供与以前类似的接口,现在不需要担心 Zend,只需在遗留应用程序中编写一些替代功能即可。

耶。

奇怪的是,我一边泡茶一边往杯子里放糖时意识到了这一点;而不是将勺子移到杯子上(从糖罐中并将其洒到任何地方(即要重写大量代码))将它们都移到杯子上并从下面取出糖罐 - 你会得到相同的结果而更少一团糟,糖是 JS,而 Jar 是大型 ZF 框架:-p

于 2009-06-10T14:57:42.553 回答