控制器属性不能包含非标量/非空值


Controller attributes cannot contain non-scalar/non-null values

我想提供我的控制器对象像这样与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 }) }}

希望对您有所帮助