0

我定义了一些动作,例如“action = '[module]/[action]'”并提交。结果是 '[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 没有执行任何操作(所以实际上这部分代码是无用的)。

所以当 URL 应该是:http://[baseUrl]/index.php/module_name/majsuivi

而是:在调用 'majSuivi 操作之前,当前 url 在http://[baseUrl]/index.php/enquete/visu/enq_id/24/menu_id/module_name/majsuivi 哪里?/index.php/enquete/visu/enq_id/24/menu_id/每次单击“a 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

ETC ...

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

谢谢你的帮助

4

2 回答 2

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')?>";

因为'module_name/majsuivi'是相对路径,将与您当前的 url 连接而不/ 在开头

于 2012-05-04T13:34:14.120 回答
0

非常感谢,这些都是非常有用的信息,尤其是我认为的第三个选项。实际上,在部署之前我有不同的服务器进行测试。我观察到了两种行为。

行为 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,然后它不起作用,我确信如果它在本地服务器上不起作用,它不会在其他服务器上起作用。

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

感谢和问候

于 2012-05-21T14:47:45.520 回答