Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 细枝访问对象_Php_Twig - Fatal编程技术网

Php 细枝访问对象

Php 细枝访问对象,php,twig,Php,Twig,我想访问细枝模板中对象的值 通常我会得到这样的回报: echo $lang->get("test"); 但是,如何在使用细枝的模板中执行相同的操作 我尝试了很多方法,但没有一个奏效 例如,我尝试: {{ attribute(lang, get, 'test') }} 结果 可捕获致命错误:参数3传递给 细枝\节点\表达式\ GetAttr::\构造()必须是的实例 细枝节点表达式数组,细枝节点表达式常量的实例 给定 谢谢您要做的是在一个对象上调用一个方法,该对象在一个细枝模板中具有参

我想访问细枝模板中对象的值

通常我会得到这样的回报:

echo $lang->get("test");
但是,如何在使用细枝的模板中执行相同的操作

我尝试了很多方法,但没有一个奏效

例如,我尝试:

{{ attribute(lang, get, 'test') }} 
结果

可捕获致命错误:参数3传递给 细枝\节点\表达式\ GetAttr::\构造()必须是的实例 细枝节点表达式数组,细枝节点表达式常量的实例 给定


谢谢

您要做的是在一个对象上调用一个方法,该对象在一个细枝模板中具有参数。我不认为这是支持的,因为这可能被视为一个坏主意。Twig支持对象上的getter的概念,这些getter在调用时不带参数:

{{ lang.test }}
将尝试按以下顺序调用以下命令之一:

  • $lang->test
  • $lang->test()
  • $lang->getTest()
  • $lang->isTest()
如果对象实现了这些访问器和约定中的任何一个,Twig将找到它。任何超出此约定的内容,如
get('test')
,都不是细枝哲学的一部分。一般来说,这不是一个广泛使用的习语,所以您可能应该坚持使用上述方法之一


您可以实现
\uuuuu isset
\uuuu get
\uuu call
魔术方法来支持这些访问器方法之一。

我知道这是一个老问题,但经过3个小时的互联网搜索,没有找到任何示例,我想确保它得到记录

回到您最初的尝试之一:

{{ attribute(lang, get, 'test') }}
我也在尝试做同样的事情,这应该会根据实际情况起作用。不幸的是,没有使用这个的例子。我发现方法名(get)必须是一个字符串('get'),所以我改变了它,但它仍然不起作用。我最后做的是:

{% set myText = lang.get('test') %}
{{ myText }}
这很有效,但当我不得不重新编写时,需要编写很多代码。因此,我用这两种方法制作了一个简单的模板,并检查了编译后的输出。原文是这样编写的:

echo twig_escape_filter($this->env, $this->getAttribute((isset($context["lang"]) ? $context["lang"] : null), "get", "test"), "html", null, true);
第二个(2个衬垫)用于:

经过检查,我意识到了区别(检查getAttribute的第3个参数),参数是数组!这是一个很好的信息。我将我的原稿改为:

{{ attribute(lang, 'get', ['test']) }}
现在它开始工作了


希望这对别人有帮助

谢谢你的回答,但这对我帮助不大。问题是,我试图调用的对象是一个语言系统,并返回我想要的语言字符串。在上面的示例中,它返回变量“test”的字符串。希望你们理解我的意思。你们应该把它实现为一个过滤器或是对Twig的函数扩展,而不是一个接受动态参数的对象。事实上,我已经在中完全做到了这一点(通过一个打开的pull请求)。这是一个比将翻译对象传递到视图更优雅的系统。另请看:有属性吗/我想
属性(lang,'get','test')
应该这样做(注意
get
周围的引号)。但是我从来没有用过这个。你的回答是:Sry,但我该如何使用它呢?我对树枝比较陌生。最后一个答案是:这与我第一篇文章(问题)中的错误相同。你是否尝试了
lang.get('test')
?是的。我在这里找别的东西,但是看到了你的问题;我不知道在过去的几年里,Twig是否有了很大的变化,但至少在我开始使用Twig的最后5个月里,这一切都很好。例如,
{%fortnm.getTNservice(user_id)%%{{{TNS.tnu id}}{%fortnm.getTNpublications(TNS.tnu id)%%}{{TNP.publication_id}{%endfor%}{%endfor%}
令人惊讶的是,这就是错误消息所指示的(数组应为,get常量)
{{ attribute(lang, 'get', ['test']) }}