[英]Symfony 1.4 wrong URL routing
我定義了一些動作,例如“動作='[模塊] / [動作]'”並提交。 結果是'[currentUrl] / [module] / [action]'而不是'[module] / [action]',我不知道為什么,這是代碼:
在前面 :
<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是顯示的句子,第二個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應該是: 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/
是當前網址在調用“ majSuivi操作”之前。 每次我單擊“ a href”按鈕時,都會將“ module_name”添加到URL,如下所示:
點擊-> 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
等...
我認為它不是來自routing.yml配置文件,但是如果有人認為可以,我會寫它的內容。
謝謝你的幫助
您應該使用這樣的東西:
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')?>";
因為'module_name/majsuivi'
是相對路徑,並且將與您當前的URL串聯在一起,開頭不帶/
非常感謝,這些都是非常有用的信息,尤其是我認為的第三種選擇。 實際上,在部署之前,我有不同的服務器用於測試。 而且我觀察到兩種行為。
行為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
那個然后不起作用了,我敢肯定,如果它不起作用在本地服務器上,不會在其他服務器上。
我目前尚未解決第三種解決方案 ,因為它已經解決了我的問題,但是它看起來是一種有效的解決方案,我認為它應該可以工作。 如果我使用它,我會更新。
感謝和問候
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.