在UserIdentity里面添加user的而外属性,怎么会娶不到值?

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,否则可能出错