Symfony 1.4 错误的 URL 路由


Symfony 1.4 wrong URL routing

我定义了一些动作,如"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 而没有执行任何操作(所以实际上这部分代码有点无用(。

所以当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 action"之前的当前网址。每次我单击"href"按钮时,它都会将"module_name"添加到 URL,如下所示:

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

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

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

等。。。

我不认为它来自 routeting.yml 配置文件,但如果有人认为可以,我会写下它的内容。

感谢您的帮助

你应该使用这样的东西:

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

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

或者如果您的路由中有此路由.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然后不起作用,我敢肯定,如果它在本地服务器上不起作用,它就不会在其他服务器上工作。

还没有测试第三个解决方案,因为我现在已经解决了我的问题,但它看起来是一个有效的解决方案,我认为它应该有效。如果我使用它,我会更新。

感谢和问候