2012-05-04 79 views
0

我有一些定義像「action ='[module]/[action]'」&提交的動作。 結果是 '[CURRENTURL]/[模塊]/[動作]' 而不是 '[模塊]/[動作]',我想不通爲什麼,這裏的代碼:Symfony 1.4錯誤的URL路由

在前面:

<a href="<?php echo (isset($disabledMajSuivi) && $disabledMajSuivi ? "#" : "javascript:showYesNoDialog('". addslashes(__('enquete.visu.msg.confirmation.majsuivi')). "', 'majSuivi')"); ?>" > 
    <?php echo __('enquete.visu.majsuivi');?> 
</a> 

showYesNoDialog是一個JavaScript函數,其中第一個參數是句子顯示和第二arg是回調函數,所以「majSuivi」叫回來,看起來像這樣:

<script> 
function majSuivi(response) { 
    if(response == 'yes') { 
     document.forms[0].action = "module_name/majsuivi"; 
     document.forms[0].submit(); 
    } 
} 

這已進行調試時,條件是true

行動「majSuivi」(即大)結束這樣的:

$this->redirect('enquete/visu?enq_id='.$enq_id 
     . (!is_null($personneMorale) ? '&pm_id='.$personneMorale->getPmId() : '')); 

但由於錯誤的URL的執行任何動作(所以actualy這部分代碼是一種無用的)。

所以當URL應該是:http://[baseUrl]/index.php/module_name/majsuivi

相反,它是:http://[baseUrl]/index.php/enquete/visu/enq_id/24/menu_id/module_name/majsuivi/index.php/enquete/visu/enq_id/24/menu_id/是當前的URL只是打電話「majSuivi行動之前。 每次我點擊 「A HREF」 按鈕,添加 「MODULE_NAME」 的網址類似以下內容:

點擊 - >http://[baseUrl]/index.php/enquete/visu/enq_id/24/menu_id/module_name/majsuivi

CLICK2 - >http://[baseUrl]/index.php/enquete/visu/enq_id/24/menu_id/module_name/module_name/majsuivi

CLICK3 - >http://[baseUrl]/index.php/enquete/visu/enq_id/24/menu_id/module_name/module_name/module_name/majsuivi

etc ...

我不認爲它來自routing.yml配置文件,但如果有人認爲它可以,我會寫它的內容。

感謝您的幫助

回答

1

你應該使用這樣的事情:

document.forms[0].action = "<?php echo url_for('module_name/majsuivi')?>"; 

document.forms[0].action = "/index.php/module_name/majsuivi"; 

,或者如果你有這條路線在你的routing.yml

document.forms[0].action = "<?php echo url_for('@your_route_name_from_yaml')?>"; 

Becaus e 'module_name/majsuivi'是一個相對路徑,將與您當前的網址連接,但不包括/

+0

非常感謝,這是非常有用的信息,espacially第三個選項,我認爲。 – Robert

0

非常感謝,這些信息非常有用,特別是我認爲的第三種選擇。 Actualy部署之前,我有不同的服務器進行測試。我觀察到兩種行爲。

行爲1:我測試的每種解決方案中,只有document.forms[0].action = "/module_name/majsuivi";正在工作。

行爲2:我測試過的每種解決方案都沒有工作。

我已經挖掘出了不同於一個測試服務器的PHP版本,但是將兩臺服務器放在相同的PHP和Apache版本下並沒有讓它們對這個問題有相同的行爲。

由於部署環境具有行爲1,我現在通過使用以下javascript解決了此問題:document.forms[0].action = "/module_name/majsuivi";

所有的東西我以前解釋要去我的本地服務器,配合行爲1.

我已經測試了第一個選項其上:document.forms [0] .action =「」;這在任何服務器上都不起作用。

第二個給我http://[baseUrl]/index.php/enquete/visu/enq_id/24/index.php/module_name/majsuivi,然後不工作,我敢肯定,如果沒有本地服務器上運行,它不會對別人。

我沒有測試過第三個解決方案我種解決我的問題,現在,但它看起來有效的解決方案,我認爲它應該工作。如果我利用它,我會更新。

感謝&問候