0

我对 FOSRestBundle 有疑问。

我正在尝试在路由中使用父选项,但出现以下错误

[InvalidArgumentException] 每个父控制器都必须有get{SINGULAR}Action($id)方法,其中 {SINGULAR} 是关联对象的单数形式

这是我的routing.yml

organisation : 
  type: rest
  resource: MyProject\RestBundle\Controller\OrganisationRestController
  name_prefix:  api_  
users : 
  type: rest
  resource: MyProject\RestBundle\Controller\UsersRestController
  name_prefix:  api_
  parent: organisation

我已经在我的控制器中实现了 ClassRessourceInterface。

为什么会出现上述错误?

4

2 回答 2

0

您正在尝试在此处实现资源集合

正如文档所说:

在这种情况下,您的 UsersController 必须始终有一个资源 get... 操作

class UsersController extends Controller
{
    public function getUserAction($slug)
    {} // "get_user"   [GET] /users/{slug}

    ...
}

但是该示例的不同之处在于您的组织是父级而不是用户。

您的 MyProject\RestBundle\Controller\IrganizationsRestController 必须提供类似getOrganizationsRestAction()的东西。OrganisationsRest ... 是你的父母。

我不确定 FOSRestBundle 在尝试访问单数形式的 UsersRest 时期望什么名称......

由于您的控制器名称没有提供任何以“Rest”为后缀的额外信息,因为您的包已经命名为Rest Bundle ...您可以考虑将控制器名称更改为:

 OrganisationsController
 UsersController

并将getOrganisationAction()方法添加到 OrganisationsController 中,如示例中所示。

于 2013-06-16T17:20:02.680 回答
0

也许你忘记在嵌套实体中添加嵌套 ID 参数到这个 get{SINGULAR}Action($id):

class SubEntityController {
    ...
    getSubEntityAction($subId, $id) {
       ...   
    }
}

... getSubSub....($subSubId, $subId, $id) ... 以此类推,在每个嵌套实体上。

这个对我有用。

于 2015-11-08T23:21:51.530 回答