我想提供我的控制器对象像这样与hinclude.js:
{{ render_hinclude(controller("AppBundle:Default:Test"), { 'object': my_object }) }}
不幸的是,我得到了这个错误:
"在呈现模板期间抛出异常控制器属性不能包含非标量/非空值(键'"my_object'"的值不是标量或null)。'")
你能帮我吗?
例外是正确的,当使用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
是一个对象,那么只有公共属性将被合并到结果中。
顺便说一句,你提供的语句是无效的,你应该把这个属性传递给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 })) }}
取决于控制器路由定义,可能你需要传递对象的id,所以试试这个:
{{ render_hinclude(controller("AppBundle:Default:Test"), { 'object': my_object.id }) }}
希望对您有所帮助