UserIdentity里面
public function authenticate(){
在if语句的没错误登录后,添加了值保存
$this->setState(‘duty’, $user->duty);
但在别的地方,某个model里面的beforevalidate方法里面,取值Yii::app()->user->duty
报错误
属性 "CWebUser.duty" 未被定义.
UserIdentity里面
public function authenticate(){
在if语句的没错误登录后,添加了值保存
$this->setState(‘duty’, $user->duty);
但在别的地方,某个model里面的beforevalidate方法里面,取值Yii::app()->user->duty
报错误
属性 "CWebUser.duty" 未被定义.
你有没有在Class里定义 duty 成员?
user有duty这个字段的。
要在UserIdentity里加入属性的, 比如说, 在里面加入
public $duty;
然后在authecate里使用setState赋值.
setState(‘attribute’,‘value’)的属性是不需要在类中定义的吧。我想这就好比php中魔法方法_SET样,是吗?
而事实上,我在做的时候,赋予了一个没有定义的属性时也是成功的,不过你可能需要在获取属性的值是采用了getState(‘attribute’)方法,而不是->attribute;
http://www.yiiframework.com/doc/cookbook/6/
根据这个cookbook,是不需要添加类属性的。取值也是直接->属性 就出来了。
现在搞的我迷糊了。不知道怎么用,老是丢失值。干脆每次取值都到数据库取算了。
是不是Yii::app()->user是guest呢?
果然是guest。在那里设置这个值?
我是用的admin这个帐号登录的,不知道为什么成了guest
我的name和username是两个值的。是不是这里冲突了?
$this->username=$user->account;
$this->setState('account', $user->account);
$this->setState('name', $user->name);
CWebUser.isGuest 是根据id来判断的. 如果id为null,就认为是guest.
缺省情况下identity的id=username. 你看看你的identity class里的相关代码.
另外, setState(‘name’)的确会造成冲突, 这会造成$user->account的值在CWebUser里访问不到.
知道大概原因了。duty是null值,所以没有传到state里面。但不理解这段代码什么意思?
为什么=defaultValue就不让存在state里面?
public function setState($name,$value,$defaultValue=null)
{
if($value===$defaultValue)
unset($this->_state[$name]);
else
$this->_state[$name]=$value;
}
这段代码的意思是:既然和缺省值相同,那么state里就不用保存了,因为你用getState()取时,会返回缺省值。
但 user->property 不会返回缺省值啊?是不是这里要改改?
你说的有道理。我已经把这个改过来了。现在,只要你设置setState(),那么这个state就可以通过user访问了。
1.08 里面,这个需求改了?
如果1.08改了,我就9号一起更新。
有时候重新登录完破,这样就可以重新getState,否则可能出错