我想用hinclude.js提供我的控制器对象:
{{ render_hinclude(controller("AppBundle:Default:Test"), { 'object': my_object }) }}
不幸的是我收到了这个错误:
“在渲染模板期间抛出了异常 (\“控制器属性不能包含非标量/非空值 (key \“my_object \”的值不是标量或null)。\“)
你能帮助我吗?
提前致谢!
答案 0 :(得分:1)
异常是正确的,当使用render_hinclude()
时,只允许为控制器属性传递标量/空值,因为需要从它们生成有效的片段URI。
<强>为什么吗
假设您尝试使用私有属性传递此实体,在生成此参数的URI时会发生以下情况:
var_dump(http_build_query(array('object' => $my_object)))
// output:
// string(0) ""
http://php.net/manual/en/function.http-build-query.php#refsect1-function.http-build-query-parameters
如果
query_data
是一个对象,那么只有公共属性才会被合并到结果中。
BTW您提供的声明无效,您应该将此属性传递给controller(...)
函数,如下所示:
{{ render_hinclude(controller("AppBundle:Default:test", {'id': my_object.id })) }}
然后,您的控制器应具有标量值id
并获取相应的对象。但是,请使用参数解析程序功能来避免此步骤:
public function testAction(Object $object) {...}
下一步:
{{ render_hinclude(controller("AppBundle:Default:test", {'object': my_object.id })) }}
答案 1 :(得分:0)
取决于控制器路由定义,可能需要传递对象的id,所以试试这个:
{{ render_hinclude(controller("AppBundle:Default:Test"), { 'object': my_object.id }) }}
希望这个帮助