Změna dat v identitě za běhu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kleinpetr
Člen | 480
+
0
-

Ahoj,

chci se zeptat jakým způsobem mohu změnit data v identitě např.:

public function actionChangelang($lang_id){
	$this->user->identity->data['lang_id'] = $lang_id;
}

resp. v layoutu mám nějaký select, který po přepnutí zavolá ajax na MyPresenter:changelang

Hází mi
Indirect modification of overloaded property Nette\Security\Identity::$data has no effect

Díky za radu

Editoval kleinpetr (22. 5. 2015 8:43)

Blujacker
Člen | 89
+
0
-

Napada me vytvorit si novou instanci Nette\Security\Identity se zmenenymi udajemi a tu priradit userovi pomoci $this->user->login(newIdentity)

vvoody
Člen | 910
+
+2
-

Takto by ti to malo prejsť

$this->user->identity->lang_id = $lang_id;
kleinpetr
Člen | 480
+
0
-

Takže identita je opravdu read-only ? Našel jsem někde diskuzi z roku 2009 kde David píše, že bude Identita r/w.

Editoval kleinpetr (22. 5. 2015 10:11)

kleinpetr
Člen | 480
+
0
-

Opravdu funguje ! takže nemusím tedy v Identitě zajíždět až úplně do polí ? on zná všechny potomky polí ? Resp. ke všem proměnným v poli data mohu přistupovat jako k objektu ?

Editoval kleinpetr (22. 5. 2015 10:11)

vvoody
Člen | 910
+
0
-

Ta posledná veta je napresnejšia.

David Matějka
Moderator | 6445
+
0
-

ma magicke __get a __set metody: https://api.nette.org/…dentity.html#…

kleinpetr
Člen | 480
+
0
-

Děkuji :) a ještě mám takový menší dotaz. Když si zavolám ajax na MyPresenter:changelang, ale momentálně jsem třeba na Articles:list tak když v metodě changelang() zavolám $this->redirect('this') tak se logicky zacyklí. Jak mohu přesměrovat opět na místo kde jsem byl ? Díky

vvoody
Člen | 910
+
0
-

prečo by si presmerovával ajaxový request?

David Matějka
Moderator | 6445
+
0
-

na tohle bude lepsi signal nez akce

kleinpetr
Člen | 480
+
0
-

Ajo.. já měl zato že signál se váže vždy jen na presenter ve kterém jsem a nedošlo mi že když ten signál vytvořím třeba v basePresenteru tak bude přístupný ze všech presenterů ! :) nyní už redirect this funguje, díky moc