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

时间:2016-10-05 13:24:48

标签: php symfony twig sonata

我想用hinclude.js提供我的控制器对象:

{{ render_hinclude(controller("AppBundle:Default:Test"), { 'object': my_object }) }}

不幸的是我收到了这个错误:

  

“在渲染模板期间抛出了异常   (\“控制器属性不能包含非标量/非空值   (key \“my_object \”的值不是标量或null)。\“)

你能帮助我吗?

提前致谢!

2 个答案:

答案 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 }) }}

希望这个帮助