我有一个局部视图,它在DVD页面上显示一个表单:
带表单的部分视图:
<div>
{{ form(form) }}
</div>
在DVD页面中使用部分视图:
{{ render(controller(
'DVDBundle:Actors:addActor',
{ 'dvdId': dvd.id }
)) }}
这个想法是管理员可以使用dvd页面上的表单(url:website/dvdpage
)添加演员
然而:控制器Actors
中的函数addActor
似乎在Request中没有任何内容,因为它是通过部分视图使用的:
控制器功能:
public function addActorAction(Request $request, $dvdId)
{
//form related code...
......
...
}
当检查内部内容时:$request
我得到:
_fragment?_path=_format%3Dhtml%26_locale%3Den%26_controller%3DDVDBundle%253AActors%253AaddActor
并且该错误被禁止访问403。此处:
if (!$request->isMethodSafe()) {
throw new AccessDeniedHttpException();
}
奇怪的是,如果我通过url:website/addactor
直接转到那个视图,那么同样的表单也能工作,并且Request在同一个控制器中具有正确的值。
我发现了这个:
当使用控制器而不是URL时,必须启用Symfony碎片配置:
在我的配置中添加了确切的行:fragments:{path:/_fragment}但仍然一无所获。
但不知道该怎么做,该做什么?有什么帮助吗?
是的,这对我来说很有效,将请求作为参数传递给控制器函数:
{{ render(controller(
'DVDBundle:Actors:addActor',
{ 'dvdId': dvd.id, 'request': app.request }
)) }}
注意,您还需要更新路由以包括第二个参数,如:
add_actor:
url: addactor/{dvdId}-{request}
....