【问题标题】:force cakephp 3 auth->user() to show virtual fields强制 cakephp 3 auth->user() 显示虚拟字段
【发布时间】:2014-12-15 08:13:17
【问题描述】:

我有一个带有访问器的用户实体

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());

【问题讨论】:

    标签: cakephp authentication field virtual cakephp-3.0


    【解决方案1】:

    更新 该问题已在核心中得到修复,身份验证适配器现在通过toArray() 获取实体并转换它们,因此可能包含虚拟字段,因为它们已在$_virtual 属性如下所述。


    这里的问题是身份验证适配器,它在没有水合的情况下获取用户数据,即它只会接收一个包含实际存在的列的原始数组,而不是之后可以转换为数组的实体,这将使它成为可能包括虚拟字段。

    BaseAuthenticate::_findUser()

    因此,在这一点上,最简单但有点脏的解决方法是之后再次获取用户(例如在custom authentication adapter 或您的登录操作中),这次使用水合作用,并覆盖用户数据从实体中检索到的数据。

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

    protected $_virtual = ['fullname'];
    

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

    这可能值得creating an issue over at github,也许更改基本身份验证适配器以从实体获取数据以便包含此类虚拟字段,这是有意义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      相关资源
      最近更新 更多