2010-06-09 121 views
0

我有一個非常古老的PHP應用程序(1999年),在過去的十年中一直在努力。在這一點上,應用程序開始顯示它的年齡,所以我正在向symfony 1.4的「新」框架遷移。但由於該應用程序非常龐大,我無法立即執行此操作。所以我打算將舊應用程序包裝到新的symfony應用程序中,並通過功能轉換功能。Symfony 1.4和全局變量

這一過渡的第一步是讓舊應用出現在新的symfony應用中。所以,我創建了「前端」應用程序,添加了一個「傳統」模塊,使其成爲默認主頁,並且我把我在index.php中的所有內容(所有頁面都經過了這個index.php)放在indexAction的indexSuccess.php文件。我在「視圖」中添加了代碼,因爲其中還有函數,並且更改該設置會花費比我想要花費在舊應用上更多的時間。

不幸的是我現在有一個全局變量的問題。我給大家舉一個例子(我從來沒有作出這樣的這個寄存器功能,但它的,所以請看看過去的這一點。

$session = new ps_session; 
$demo = "this is a demo variable"; 
$session->register('demo'); 

在ps_session我有這個方法

public function register($var) { 
    global $$var; 
    $_SESSION [$var] = $$var; 
} 

所以應該將$ demo的內容放在名爲「demo」的會話變量中。聰明的權利:)無論如何,var_dumping顯示$$ var爲「null」,如果在調用函數之前和之後調用var_dump,則$ demo會被填充。完全相同的代碼沒有symfony,它會返回正確的內容。

我在想什麼?全球通話分佈在這個龐大的應用程序的所有區域,所以我真的不想切換到其他的東西,所以我希望能夠快速修復:)

也許相關,除索引外的所有代碼.php內容位於前端/ lib/legacy /文件夾中,索引位於前端/ modules/legacy /(如果有一些範圍問題,我缺少)

+0

你在任何時候都使用相同的PHP版本嗎? – greg0ire 2010-06-09 14:25:44

+0

是的,5.3.2使用相同的php設置(register_globals on) – Roderik 2010-06-09 14:34:55

回答

0

我將整個舊站點放在web/legacy下,並將默認索引操作重定向到傳統文件夾。大部分的網址都是由mod_rewrite製作的,所以很容易修復。其他網址經過了一個功能,所以修復是可以的,只有少數是硬編碼的。爲了使它完全透明,我只需要重做主頁開始,所以我沒有可見/遺產/在我的網址。謝謝您的幫助!

0

我認爲,既然indexSuccess.php文件已包含在一個函數內(更確切地說,在這裏:lib/vendor/symfony/lib/view/sfPHPView.class.php:185),這是行不通的,因爲$ demo不在全局範圍內。我沒有看到任何簡單的解決方法... 我認爲你應該在/ web中創建一箇舊文件夾,並使用路由重定向到它,如果該url對應於尚未遷移的東西。

+0

在索引操作中添加$ this-> redirect('/ legacy/index.php'))的問題是post變量(get vars i可以修復)不會傳輸到舊索引。我似乎沒有找到有關路由的文檔中的另一個解決方案,以瞭解我可以如何處理這個問題? – Roderik 2010-06-09 14:51:12

+0

也許你可以在apache級別做類似的事情,用rewriteRules或者類似的東西?在這種情況下,我認爲POST信息不會丟失 – greg0ire 2010-06-09 15:14:31

0

我同意greg0ire,這是sfPHPView包含indexSuccess的方式的問題。

您能簡單地在默認的/ index操作中使用require index.php嗎?