我定义了一些类似于"action = 'module/action'“& submit的操作。结果是'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时
而是:http://[baseUrl]/index.php/enquete/visu/enq_id/24/menu_id/module_name/majsuivi,其中/index.php/enquete/visu/enq_id/24/menu_id/是调用'majSuivi操作之前的当前url。每次我点击"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配置文件,但如果有人认为它可以,我会写它的内容。
谢谢你的帮忙
发布于 2012-05-04 21:34:14
你应该使用类似这样的东西:
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-21 22:47:46
非常感谢,这些都是非常有用的信息,特别是我认为的第三个选择。实际上,在部署之前,我有不同的服务器可供测试。我观察到了两种行为。
Behavior 1:在我测试过的所有解决方案中,只有document.forms[0].action = "/module_name/majsuivi";可以正常工作。
Behavior 2:在我测试过的所有解决方案中,没有一个是有效的。
我深入研究了不同测试服务器的php版本,但将两个服务器放在相同的PHP和Apache版本下并不会使它们在这个问题上有相同的行为。
由于部署环境具有行为1,我现在通过使用以下javascript解决了这个问题:document.forms[0].action = "/module_name/majsuivi";。
我之前解释的所有内容都在我的本地服务器上,这与行为1相匹配。
我已经测试了first option:document.forms.action = "";,它在任何服务器上都不起作用。
的第二个one给了我http://[baseUrl]/index.php/enquete/visu/enq_id/24/index.php/module_name/majsuivi,然后它就不能工作了,我确信如果它在本地服务器上不能工作,它在其他服务器上也不能工作。
我还没有测试third solution,因为我现在已经解决了我的问题,但它看起来是一个有效的解决方案,我认为它应该可以工作。如果我用了它,我会更新的。
致谢和问候
https://stackoverflow.com/questions/10446527
复制相似问题