强制cakephp 3 auth-> user()显示虚拟字段

Anghazi Ghermezi

我有一个具有访问者的用户实体

namespace App\Model\Entity;
use Cake\ORM\Entity;
use Cake\Auth\DefaultPasswordHasher;
class User extends Entity {
   protected $_accessible = [
       'email' => true,
       'username' => true,
       'password' => true,
   ];
   protected function _getFullname() {
       return $this->_properties['firstname'] . '  ' .$this->_properties['lastname'];
   }
}

当我打印时

$user->fullname

鉴于它正常工作,但我怎么能得到全名的结果

pr($this->Auth->user());
ndm

更新此问题已在核心中解决,身份验证适配器现在可获取实体并通过进行转换toArray(),因此,假定它们在$_virtual属性中定义,则可能包含虚拟字段,如下所述。


这里的问题是身份验证适配器,它无需水合作用即可获取用户数据,即它将仅接收具有实际存在的列的原始数组,而不是随后可以转换为数组的实体,这将使其包含虚拟领域。

参见BaseAuthenticate :: _ findUser()

因此,在这一点上,最简单但又很脏的解决方法是,此后通过水化再次获取用户(例如,在自定义身份验证适配器中或在您的登录操作中),然后用数据覆盖用户数据从实体检索。

请注意,如果使用Entity::toArray(),则必须公开虚拟属性,以便将其包含在结果中:

protected $_virtual = ['fullname'];

参见http://book.cakephp.org/3.0/en/orm/entities.html#exposed-virtual-properties

可能值得在github上创建一个问题,也许更改基本身份验证适配器以从实体获取数据,以便包括这样的虚拟字段,这是有意义的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Cakephp 3的虚拟字段

CakePHP 3丢失Auth会话

Cakephp 3.X Auth组件登录具有多个字段

CakePHP 语法从 $Auth 检索关联字段

CakePHP Auth不允许显示图像

CakePHP:从$ Auth-> user()到达相关表

如何在CakePHP 3的find中包含虚拟字段?

在CakePHP 3上,登录[Auth-> identify()]始终为false

如何在事件中使用Cakephp 3的Auth组件

使用CakePHP 3和Crud插件强制使用JSON格式

如何从cakephp中的$ this-> Auth-> user()获取ID?

Cakephp Auth重定向

Cakephp 3.0:将选定的字段强制转换为int

从 CakePHP 3 中的中间件获取 Auth 组件用户 ID

FirebaseUi-Auth强制登录

Cakephp Auth登录REST响应

CakePHP 3,如果字段为空,则显示整个记录行,否则不显示

Cakephp3:CASE 语句被强制为字符串的结果,需要整数

在CakePHP中,我可以在auth调用之前在模型中很好地调用一个虚拟方法,但不能在auth之后

CakePHP 2.8 代码在 $this->Auth->user 中有额外数据。如何?

有一种方法可以选择要在数据中加载的虚拟字段?Cakephp 3

CakePHP 3包含选择字段

查找方法cakephp 3中的字段限制

CakePHP 3:添加额外的字段以从模板访问

在cakephp 3.x的模板中显示实体字段的最大长度

通过选择下拉列表元素来显示\隐藏输入字段 |CakePHP 3

CakePHP 3 在模板中显示验证错误

Vault Approle Auth强制使用默认策略

如何通过在CakePHP 3中组合/具有两个字段来创建keyValue对(显示字段)?