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

时间:2016-06-07 17:38:09

标签: ajax symfony routing

我的路线有很多参数;但是当我使用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

3 个答案:

答案 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 }),