CakePHP身份验证插件身份关联
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CakePHP身份验证插件身份关联相关的知识,希望对你有一定的参考价值。
我正在使用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()
时指导我如何在用户实体上包括关联吗?
答案
很早以前不推荐使用旧的Auth组件的身份验证对象的contain
选项,推荐的方法是使用自定义查找程序,这也是在新的身份验证插件中完成的方式。
ORM解析器采用finder
选项,并且必须通过使用的标识符进行配置,在您的情况下,该标识符可能是密码标识符,例如:
$service->loadIdentifier('Authentication.Password', [
// ...
'resolver' => [
'className' => 'Authentication.Orm',
'finder' => 'authenticatedUser' // <<< there it goes
],
]);
然后在表类的finder方法(可能是UsersTable
中,您可以包含所需的任何内容:
public function findAuthenticatedUser(\Cake\ORM\Query $query, array $options)
return $query->contain(['Activities', 'Clients']);
另请参见
- Cookbook > Controllers > Components > AuthComponent > Customizing The Find Query
- Cookbook > Database Access & ORM > Retrieving Data & Results Sets > Custom Finder Methods
- Authentication Cookbook > Identifiers
- Authentication Cookbook > Identifiers > ORM Resolver
以上是关于CakePHP身份验证插件身份关联的主要内容,如果未能解决你的问题,请参考以下文章