簡體   English   中英

Symfony 1.4錯誤的URL路由

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM