Twig 访问受保护/私有模型变量

Posted

技术标签:

【中文标题】Twig 访问受保护/私有模型变量【英文标题】:Twig accessing protected/private model variables 【发布时间】:2018-07-16 12:22:24 【问题描述】:

我在使用 Twig 时遇到了问题,(事实上这并不是一个真正的问题,但它让我感到不安)

我在 php 中有一个 Post 模型类,并且我有一些 protected 变量(我也尝试使用 private)。为了访问它们,我在 php getMyVariable 中有一个 public 函数。如果在我的控制器中我尝试回显受保护的变量,它会抛出一个错误Cannot access protected property...,所以我必须使用该函数来回显我的变量。

这很正常,这就是我想要的

但是,然后我尝试在 Twig 中渲染它,并使用与该函数相同的系统来渲染我的变量,它可以工作,很棒......但是如果我尝试直接渲染我的受保护变量,它也可以工作并且这不是一个真正的好习惯,有没有办法直接在 twig 中停止渲染受保护/私有变量(我的意思是超越 getter 函数)

【问题讨论】:

天哪,真的吗?这太棒了,谢谢。我想我没有仔细阅读文档,感谢您的帮助! 【参考方案1】:

请查看documentation。 Twig 没有访问受保护的变量,这是不可能的,但由于它的实现,它将转换你的 twig 代码,例如foo.bar$foo.getBar() 并检查该方法是否存在,因此它能够“访问”受保护的变量


来自Twig的文档

为了方便,foo.bar 在 PHP 上做了以下事情 层:

- check if foo is an array and bar a valid element;
- if not, and if foo is an object, check that bar is a valid property;
- if not, and if foo is an object, check that bar is a valid method (even if bar is the constructor - use __construct() instead);
- if not, and if foo is an object, check that getBar is a valid method;
- if not, and if foo is an object, check that isBar is a valid method;
- if not, and if foo is an object, check that hasBar is a valid method;
- if not, return a null value.

另一方面,foo['bar'] 仅适用于 PHP 数组:

check if foo is an array and bar a valid element;
if not, return a null value.

source

【讨论】:

以上是关于Twig 访问受保护/私有模型变量的主要内容,如果未能解决你的问题,请参考以下文章

PHP访问控制

使用受保护和继承时无法访问在类中声明的私有成员

合成的实例变量是不是生成为私有而不是受保护?

访问受保护或私有财产

哪个功能,受保护的或私有的更安全? [复制]

Java通过受保护的getter访问私有超类成员