【问题标题】:Placeholders in symfony's url_for() helper functionsymfony 的 url_for() 辅助函数中的占位符
【发布时间】:2011-07-04 09:43:18
【问题描述】:

我正在开发一个 AJAXy 自动完成小部件。我正在尝试使用占位符创建一个 symfony URL,然后我可以将其传递给我的 Javascript,以便 JS 可以注入它通过 AJAX 检索到的记录的 ID。例如:

$this->widgetSchema['sons_list'] = new ynWidgetAjaxAutocomplete(
  array(
    'item_url'        => url_for( 'person/edit?id=%' ),
    // OR 
    'item_url'        => url_for( 'person/%/edit' ),
  )
);

但这些都不起作用 - 我正在寻找/person/%25/edit,但第一个产生/person/edit/action?id=%25,第二个产生/person/%25/action。如果我传递一个数字占位符,它确实有效,但这对我来说似乎是一个讨厌的黑客:

$this->widgetSchema['sons_list'] = new ynWidgetAjaxAutocomplete(
  array(
    'item_url'        => url_for( 'person/edit?id=999999999999' ),
  )
);

有人知道更清洁的方法吗?谢谢!

【问题讨论】:

    标签: symfony1 routing helpers


    【解决方案1】:

    如果你只想传递一个参数,你可以使用url_for('person/edit?id='),然后在js中附加动态参数。

    更新

    另一种方式——用js替换%25怎么样?

    【讨论】:

    • 有了你的第一个建议,我得到了/person//edit。附加 ID 并消除多余的斜线使其成为/person/edit?id=123,但sfDoctrineRouteCollection(奇怪的是)无法解析该路由。对于第二个建议,那很好;但我无法让url_for() 使用除与/^\d+$/ 匹配的占位符以外的任何占位符。
    • 其实我觉得我需要调整一下我的动作,那我应该就好了……让我试试……
    【解决方案2】:

    主要问题是自动生成的操作使用了$this->getRoute()->getObject(),但 symfony 无法将 URL 解析为 sfDoctrineRoute 并且卡在了 sfRoute,它没有 getObject()方法。我现在调整了我的操作以根据id 参数检索记录,并开始使用url_for( 'person/edit' ),在JS 中附加?id=123,类似于Darmen。我对此很满意。

    【讨论】:

      【解决方案3】:

      好问题! 这是我的解决方案(传递给 url 编号并将其替换为 JS)

      function preview_document(NODE, TREE_OBJ) {
        var url_to = '<?php echo url_for(sprintf('@document_preview?id=%s', '-999999'));?>';
        $.get(url_to.replace('-999999', $(NODE).attr('id').replace('phtml_', '')), function (data) {
          $('#document-viewer').html(data);
        });
      }
      

      【讨论】:

      • 这就是我在问题中的第二个代码块所得到的;但这对我来说似乎有点奇怪,所以我很想知道是否有更“正常”的解决方案。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多