我有一个有很多参数的路线;但是当我用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
我不知道为什么导航器没有采取第二个参数,但我已经解决了这样的问题:
var id = $(this).val();
var name = "aaa";
var url = Routing.generate('my_route', {
id: id,
}) + "/" + name;
$.ajax({
url: url,
// rest of code
只是因为其他人碰到了这个(我浪费了几个小时)...如果你传入的参数与默认值匹配,则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;
}
}
实现是有道理的,只是有点混乱,因为它会导致意外的行为。