CakePHP:$ user [$ this-> Auth-> getModel() - > alias]?

时间:2011-11-03 00:02:43

标签: php cakephp

我很难理解这里发生了什么

class AppController extends Controller {
...
public function beforeFilter() {
    $user = $this->Auth->user();
    if (!empty($user)) {            
        Configure::write('User', $user[$this->Auth->getModel()->alias]);
    }
}
...
}

在我的例子中......

  1. $ user = Array([id] => 1 [username] => user [active] => 1 [email] => user@site.com)

  2. $ this-> Auth-> getModel() - > alias ='User'(string)

  3. $ user [$ this-> Auth-> getModel() - > alias] = Array([id] => 1 [username] => user [active] => 1 [email] => user@site.com)

  4. 我的问题:

    1. $ user ['User']和$ user如何相同?在我看来,$ user是一个带有密钥id,用户名,活动和电子邮件的关联数组。我不确定如何使用“用户”键。

    2. 有人可以解释一下“::”语法以及Configure :: write('User',...)的作用以及如何访问这个'User'变量(可能有一些常规用语... )。我发现Configure :: read('User')检索此信息。这是对的吗?

    3. 最后..我在两个术语之间感到困惑用户(模型如$ this-> User-> create()创建一个新用户)和User(来自Configure :: write('User) ”,...))。它们不是一回事,是吗?

2 个答案:

答案 0 :(得分:1)

您可以将不同的模型与AuthComponent一起使用。默认值为User,但您可以将其设为MemberAdmin或其他任何用户模型。调用$this->Auth->user()会返回一个附加了该主名称的数组,例如:

array(
    'Admin' => array(
        'id' => ...
        ...
    )
)

(我怀疑你正在调试你的$user变量错误。)

代码块的唯一作用是将用户详细信息写入Configuration(只是存储值的位置),而不使用此中间Admin键。我想这是任何地方的任何代码都可以获得当前用户的详细信息,而不必担心它是$user['User']还是$user['Admin']或其他什么。相反,您只需使用Configure::read('User')Configure::read('User.id')Configure::read('User.name')等。

User中选择名称Configure::write('User', ...)完全是任意的。你可以在那里使用任何东西,它没有预定义。

顺便说一下,如果它只是控制器,你可以获得当前用户的详细信息而不必担心使用$this->Auth->user('name')调用用户模型的内容(例如获取名称)。

答案 1 :(得分:0)

$ user ['User']和$ user不能是同一个东西。你用什么代码检查$ user ['User']和$ user的内容? “::”是访问类函数和变量的方法。 “ - >” 中是如何访问对象函数和变量。它不允许访问'User'变量(它只是字符串,而不是变量)。所以Configure::write()在类Configure中调用write()类方法。

$ this-> User-> create()和Configure :: write('User',...)完全不同。 $ this-> User是User类的一个对象。 “用户”只是一个字符串。

最后,该代码所做的是将会话中的登录用户记录(由Auth组件存储)复制到运行时配置单例类Configure。 $this->Auth->getModel()->alias只是获取$ user数组的密钥。因为Auth可以配置为使用其他模型进行身份验证。