我定义了一些动作,如"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
然后不起作用,我敢肯定,如果它在本地服务器上不起作用,它就不会在其他服务器上工作。
还没有测试第三个解决方案,因为我现在已经解决了我的问题,但它看起来是一个有效的解决方案,我认为它应该有效。如果我使用它,我会更新。
感谢和问候