我有一个具有访问者的用户实体
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());
更新此问题已在核心中解决,身份验证适配器现在可获取实体并通过进行转换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] 删除。
我来说两句