我正在使用CakePHP 3.8并迁移到身份验证插件(https://book.cakephp.org/authentication/1.1/en/index.html)。
在控制器中调用$this->Authentication->getIdentity()->getOriginalData()
时,我想访问我的User
实体的几个关联。
此刻,我正在通过在IdentityInterface
实体中实现以下User
方法来实现此目的:
public function getOriginalData() {
$table = TableRegistry::getTableLocator()->get($this->getSource());
$table->loadInto($this, ['Activities', 'Clients']);
return $this;
}
但是我觉得在插件配置中应该有一个contain
参数(与AuthComponent
一样)。
有人可以在引导getIdentity()
时指导我如何在用户实体上包括关联吗?
答案 0 :(得分:1)
旧的Auth组件的身份验证对象的contain
选项在一段时间之前已被弃用,推荐的方法是使用自定义查找器,这也是在新的身份验证插件中完成的方式。
ORM解析器采用finder
选项,并且必须通过使用的标识符进行配置,在您的情况下,该标识符可能是密码标识符,例如:
$service->loadIdentifier('Authentication.Password', [
// ...
'resolver' => [
'className' => 'Authentication.Orm',
'finder' => 'authenticatedUser' // <<< there it goes
],
]);
然后在您的表类(可能为UsersTable
)的finder方法中,您可以包含所需的任何内容:
public function findAuthenticatedUser(\Cake\ORM\Query $query, array $options)
{
return $query->contain(['Activities', 'Clients']);
}
另请参见