使用AuthComponent数组中的“contains()”指定字段

时间:2012-12-03 14:54:05

标签: cakephp authentication

在CakePHP的文档中,我从版本2.2中看到,为AuthComponent添加了配置键'contains':

  

核心身份验证对象支持以下配置密钥。

     

[...]

     

包含加载用户记录时的可包含选项。

http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#configuring-authentication-handlers

但我可以'理解它是如何工作的(没有例子)。

这不起作用:

'Auth' => array(
    'authenticate'      => array(
        'Form' => array(
            'contain'   => array('User' => array('id', 'full_name')),
            'fields'    => array('username' => 'email'),
        )
    )
)

这两个都没有:

'Auth' => array(
    'authenticate'      => array(
        'Form' => array(
            'contain'   => array('id', 'full_name'),
            'fields'    => array('username' => 'email'),
        )
    )
)

连连呢?有人试过吗?

2 个答案:

答案 0 :(得分:2)

你快到了。只需在第一个示例中添加“字段”键,如下所示:

'Auth' => array(
    'authenticate'      => array(
        'Form' => array(
            'contain'   => array('User' => array('fields'=>array('id', 'full_name'))),
            'fields'    => array('username' => 'email'),
        )
    )
)

注意:虽然这在语法上是正确的,但我不明白为什么'用户'应该包含'用户'......好吧YMMV

答案 1 :(得分:2)

Contain()用于包含一个不同的模型,与Auth已经检索的模型不同(除非你试图包含其他用户,即他们的朋友或其他东西 - 但是你可能会有一个别名,而不是'用户')。

所以,一个例子是:

'Auth' => array(
    'authenticate'      => array(
        'Form' => array(
            'contain'   => array('Post'),
            'fields'    => array('username' => 'email'),
        )
    )
)

这将导致Auth在检索用户数据时检索用户的帖子。