【问题标题】:AngularJs $resource, REST and Symfony2 FOSRestBundleAngularJs $resource、REST 和 Symfony2 FOSRestBundle
【发布时间】:2015-09-18 13:46:53
【问题描述】:

我正在使用 FOSRestBundle,此捆绑包为我生成路线并将这些路线复数化。例如,对 /users.json 的 GET 请求不同于对 /user/15.json

的 GET 请求

值得注意的是,调用 /users/15.json 失败。

更多关于这个问题在这里https://github.com/FriendsOfSymfony/FOSRestBundle/issues/247

在我的 Angular 应用程序中,我使用 $resource 创建一个 RESTful 调用,URL 是一个模板,详见此处 https://docs.angularjs.org/api/ngResource/service/$resource

例如

$resource('http://example.com/:id.json')

或者

$resource('http://example.com/user/:id.json')

还有一个问题,$resource 似乎接受 REST 资源的单个 URL 模板,但由于 FOSRestBundle 的强制复数,我有多个。

我不认为破解 FOSRestBundle 是答案,那么我可以在 AngularJs 中使用 $resource 做什么来纠正这个问题?

【问题讨论】:

  • 你可以用 $resource 做任何你想做的事,即: $resource('example.com/:mode:id.json', {id : '@id'}, query : {method:'GET', params: { mode:'users', id : ''}, isArray:true}),
  • @PetrAveryanov 但我的模式仍然需要为每个请求设置,具体取决于它是针对单个实体还是多个实体。简单地将 mode 设置为 users 并没有帮助 - 我需要根据请求要求以某种方式动态设置它。
  • 如果您不喜欢 FOSRestBundle 自动管理路线的方式,那么没有什么可以阻止您设置它们以按照您想要的方式工作,或者任何您不应该这样做的真正原因。

标签: angularjs symfony fosrestbundle


【解决方案1】:

您可以将每个方法的 url 设置为第三个参数 - 操作

angular.module("example", ["ngResource"])
  .factory("userService", function($resource) {
    return $resource("http://example.com/user/:id.json", {
      id: "@id"
    }, {
      'query': {
        url: "http://example.com/users"
      }
    })
  })
  .run(function(userService) {
    userService.query();

    userService.get({id:1});
  })

【讨论】:

  • 感谢您,很高兴知道。但是,考虑到这两个框架提供的所有伟大功能,这似乎过于沉重和不必要。
  • 这对我有很大帮助,因为我已经尝试过并且稍微改变了我的路线。但是这部分有什么作用 - id: "@id" - 删除它时我的代码仍然有效?
  • 对不起,应该是第二个参数。我修复它。这意味着“作为参数 id(对象中的键)将使用传递的对象/实体中的 id”
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 2023-03-25
  • 2015-05-11
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多