V konstruktoru Identity špatný namespace u Traversable

- Werkov
 - Člen | 17
 
Ahoj,
objevil jsem podle mě chybu v konstruktoru v
\Nette\Security\Identity.
public function __construct($id, $roles = NULL, $data = NULL)
	{
		$this->setId($id);
		$this->setRoles((array) $roles);
		$this->data = $data instanceof Traversable ? iterator_to_array($data) : (array) $data;
	}
Patří tam namísto Traversable absolutní \Traversable. Respektive takto mi to teprve začalo fungovat správně na PHP 5.3.3 s poslední verzí Nette (1.0-alpha ze dne 17. 9. 2010).
Jelikož mi trvalo skoro dva dny, než jsem toto objevil, nedá mi to sem nenapsat. Nefungovalo mi přihlašování. V Auth presenteru jsem se sice přihlásil, ale po přesměrování jinam, jsem přihlášen nebyl a co víc, byla smazaná i celá session.
Když jsem při přihlašování tvořil novou identitu, předával jsem ji
jako data třídu poděděnou od \Ormion\Record,
která dědí od \Ormion\Storage, která rozhodně
Traversable je (tedy \Traversable :-). Kvůli tomu se
to však nerozpoznalo a data byla upravena (zmršena) přetypováním na pole
namísto iterator_to_array, čímž se do identity dostaly
i všelijaké vnitřnosti (private) z
\Ormion\Record.
No a konec je jednoduchý, mezi těmi private proměnnými byly
i neserializovatelné (\Ormion\Collection apod., toto jsem ještě
zcela nepochopil), ale při obnovení ze session to samozřejmě někde potichu
„kikslo“ a celá session se vytvořila čistě nová.