2012-05-04 81 views
0

我有一些定义像“action ='[module]/[action]'”&提交的动作。 结果是 '[CURRENTURL]/[模块]/[动作]' 而不是 '[模块]/[动作]',我想不通为什么,这里的代码:Symfony 1.4错误的URL路由

在前面:

<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是回调函数,所以“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的执行任何动作(所以actualy这部分代码是一种无用的)。

所以当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/是当前的URL只是打电话“majSuivi行动之前。 每次我点击 “A HREF” 按钮,添加 “MODULE_NAME” 的网址类似以下内容:

点击 - >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

etc ...

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

感谢您的帮助

回答

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

Becaus e 'module_name/majsuivi'是一个相对路径,将与您当前的网址连接,但不包括/

+0

非常感谢,这是非常有用的信息,espacially第三个选项,我认为。 – Robert

0

非常感谢,这些信息非常有用,特别是我认为的第三种选择。 Actualy部署之前,我有不同的服务器进行测试。我观察到两种行为。

行为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,然后不工作,我敢肯定,如果没有本地服务器上运行,它不会对别人。

我没有测试过第三个解决方案我种解决我的问题,现在,但它看起来有效的解决方案,我认为它应该工作。如果我利用它,我会更新。

感谢&问候