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()
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']) }}