PHP MVC:在传递给视图之前清理对象

时间:2016-05-28 09:04:01

标签: php codeigniter model-view-controller

我正在使用PHP Codeigniter构建Web应用程序。

在我的控制器中,我调用了一个模型(比如说“user”对象),它有几个属性和方法。其中一些属性包含敏感数据,如散列密码等。

我在视图中需要这个对象,但我不想将敏感属性传递给视图。

我可以想到一种方法 - 在将整个对象传递给视图之前单独取消设置每个敏感属性,但这看起来太长而且冗长(如下面的代码所示):

unset($this->user->hashed_pwd);
unset($this->user->security_question);
...(and so on)

有人知道更简洁/更简单的方法来清理视图中的这样一个对象吗?或者有更好的做法吗?

2 个答案:

答案 0 :(得分:2)

他们说的是真的。但我也同意你的担忧,我认为其中一个“对象知道太多”的情况。它应该只知道它是一个有效的用户 - 而不是它的验证方式。那么怎么样才不让那个$ this->这个用户呢?

像$ this-> userLogin之类的东西。做你的登录方法,如果成功,那么$ this-> userLogin检索$ this-> user。如果您有以后需要引用的访问级别,只需在$ this-> user中创建一个属性。

另一个优点是您的登录方法可以稍后更改 - 并且它不会更改主$ this->用户对象。

答案 1 :(得分:1)

视图不知道这些其他属性,除非您引用它们(在服务器代码中)它们不会被发送到视图(客户端代码)。如果您如此关注,您可以使用仅传输标记为安全的元素的方法构建新对象。使用命名方案来区分可以发送到视图的元素,以使代码更简洁。