混合Zend和旧程序代码

时间:2009-06-09 10:52:39

标签: php zend-framework routing global-variables

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

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

我遇到的两个问题:

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

  • 我将整个应用程序嵌入到另一个函数中,这会将全局范围中出现的变量的默认行为打破为全局 - 即它们现在只是此方法的局部变量,因此不能在没有首先指明它们是全局变量的情况下可以看到。

如果还有其他方法可以做到,我会很高兴听到它:-p

干杯,
克里斯

3 个答案:

答案 0 :(得分:2)

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

但是nevertheles我认为将程序性应用程序移植到面向对象的ZF概念是一个好主意。

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

答案 1 :(得分:1)

对于旧版代码库,我的建议是使用您的APACHE rewrite rules。通常,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,bootstrap等)放入此ZendFramework.php文件中。

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

        RewriteRule ^.*$ /ZendFramework.php [NC,L]

答案 2 :(得分:0)

原来我太野心勃勃了;

我意识到新的“模块”主要是JavaScript和一个小型的PHP控制器(CRUD),由大量的ZF支持,我真正想要的是端口是JS前端 - 没有人真正关心如何回来结束了。

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

耶。

奇怪的是,我在制作一杯茶时将糖放入杯中时意识到了这一点;而不是将勺子移到杯子上(从糖罐中溢出并将其洒到任何地方(即大量代码重新编写))将它们移到杯子上并从下面取出糖罐 - 你得到的结果相同而且少了混乱,糖是JS,Jar是ZF的最大框架:-p

相关问题