我的路线有很多参数;但是当我使用FOSJsRoutingBundle生成它时,导航器只接受第一个参数并生成404错误
示例:
var id = $(this).val();
var name = "aaa";
$.ajax({
url: Routing.generate('my_route', {
'id': id,
'name': name
}),
// rest of code
这种语法是否正确?
编辑1:
我的路线
my_route:
path: /homepage/{id}/{name}
defaults: { _controller: AcmeBundle:Personal:changename}
options:
expose: true
答案 0 :(得分:0)
我不知道为什么导航器没有采用第二个参数,但我已经解决了这样的问题:
var id = $(this).val();
var name = "aaa";
var url = Routing.generate('my_route', {
id: id,
}) + "/" + name;
$.ajax({
url: url,
// rest of code
答案 1 :(得分:0)
以防万一有人遇到这个问题(我只是浪费了几个小时)...如果您传入的参数与默认值匹配,Routing.generate将不包含该参数。
例如: 控制器:
/**
* @Route("/plc/data/{systemID}/{tagID}", name="web_plc_data", options = { "expose" = true })
*/
public function indexAction(Request $request, $systemID=1, $tagID=16)
{
}
来自树枝:
var url = Routing.generate('web_data', { systemID: 10, tagID: 16 });
将生成路线: / plc / data / 10(请注意,忽略“ tagID”参数)
来自树枝:
var url = Routing.generate('web_data', { systemID: 10, tagID: 17 });
将生成路线: / plc / data / 10/17(现在包含tagID参数,因为它与默认值不匹配)
我能找到的最佳解决方案是在路由中将默认参数设置为NULL,然后在函数本身中初始化(如果为null,则设置为某个值)。
即:
/**
* @Route("/plc/data/{systemID}/{tagID}", name="web_plc_data", options = { "expose" = true })
*/
public function indexAction(Request $request, $systemID=null, $tagID=null)
{
if ($systemID==NULL)
{
$systemID = 1;
}
if ($tagID==NULL)
{
$tagID = 16;
}
}
实施很有意义,只是有点混乱,因为它会导致意外的行为。
答案 2 :(得分:0)
如果其他人正在处理同样的问题,我只是在路由中添加了“expose true”选项,因为我使用 FOSJsRoutingBundle 在 javascript 中生成路由,并且一切正常。
这里是路由定义:
/**
* @Route("/show/{id}/{toValidate}", name="contribution_show", methods={"GET"}, options={"expose"=true})
*/
public function show(Contribution $contribution, $toValidate): Response
这是我生成路由的ajax调用:
url : Routing.generate('contribution_show', {id: id, toValidate: toValidate }),