【发布时间】:2016-02-12 15:04:28
【问题描述】:
这是我的问题的要点。我正在 Symfony2 中创建一个 API,但我似乎无法让嵌套路由工作。
这可行
api_v1_role_show:
pattern: /api/v1/roles/{roleId}
defaults: { _controller: rest_v1_roles_controller:showAction }
methods: [GET]
我可以通过这样做来证明它有效
function showAction()
{
var_dump(func_get_args()); // array(1)
}
这不起作用
api_v1_permission_post:
pattern: /api/v1/roles/{roleId}/permissions
defaults: { _controller: rest_v1_role_permissions_controller:createAction }
methods: [POST]
我最终得到了这样的东西:
function createAction()
{
//This should be array(1)
var_dump(func_get_args()); // array()
}
我错过了什么?我已经尝试在网上寻找一个多小时了,但我似乎找不到任何关于这个主题的东西。我不得不怀疑这是否是事后安全的事情。
REST 类结构
我们的应用程序中有很多休息端点。我们创建了一个休息类,它允许我们快速添加名为RestBaseController 的新端点,它看起来像这样:
class RestBaseController {
protected $urlParams;
public function showAction()
{
$this->urlParams = func_get_args();
//Shows the resource based on ID now stored in $this->urlParams;
}
public function createAction()
{
$this->urlParams = func_get_args();
$this->adjustParameters();
//creates the resource from JSON body, essentially
}
protected function adjustParameters()
{
return null;
}
}
然后是我遇到问题的课程:
class RolePermissionsController extends RestBaseController
{
protected function adjustParameters()
{
$role = $this->em()->getRepository('AppBundle:Role')
->find($this->urlParams[0]); //This will give me an error saying offset 0 does not exist.
$this->roleId = $role->getRoleId();
}
}
我的问题: 如何让嵌套 URL 在 Symfony 中工作?
【问题讨论】:
-
您不必在路由定义中省略
Action部分吗?例如rest_v1_role_permission_controller:create -
我认为我调用它所调用的方法并不重要。我改变了它,看看这是否与它有关,它返回了相同的结果。
-
您能否澄清一下究竟是什么不起作用?您收到一些错误吗?
-
当我无法在我的 API 中创建资源时,我得到一个自我强加的 422 错误。但我遇到的问题是
roleId没有传递给createAction -
为什么你使用
func_get_args()而不是通过像public function createAction($roleId)这样的函数传递路由参数?