如何在FOSJsRoutingBundle中的路由中放入许多参数?

问题描述 投票:1回答:2

我有一个有很多参数的路线;但是当我用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
ajax symfony routing
2个回答
0
投票

我不知道为什么导航器没有采取第二个参数,但我已经解决了这样的问题:

var id = $(this).val();
var name = "aaa";
var url  = Routing.generate('my_route', {
        id: id,
     }) + "/" + name;
$.ajax({
    url: url,
   // rest of code

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;
    }
}

实现是有道理的,只是有点混乱,因为它会导致意外的行为。

© www.soinside.com 2019 - 2024. All rights reserved.