Anotace – vnořené pole v anotaci
- nanuqcz
- Člen | 822
Ahoj,
nevím jak (a jestli to vůbec jde) můžu do anotací dostat pole.
Příklad:
Chci si napsat Authorizator, který se bude řídit anotacemi, např.
takovýmito:
/**
* @secured(role=(member,admin,superadmin))
*/
class FooPresenter() {
}
Pomocí Nette reflexí ale dostanu toto:
$presenter = new Reflection\ClassType('FooPresenter');
dump( $presenter->getAnnotation('secured') );
/*
Vypíše:
ArrayObject(3) ▼ {
role => "(member" (6)
0 => "admin" (5)
1 => "superadmin" (10)
}
Očekával bych:
ArrayObject(1) ▼ {
role => ArrayObject(3) ▼ {
0 => "member" (6),
1 => "admin" (5),
2 => "superadmin" (10),
}
}
*/
Možná na to jdu špatně, díky za rady :-)
- David Matějka
- Moderator | 6445
nette to nepodporuje, taky jsem to resil, uvazoval jsem o pouziti nejakyho jinyho parseru anotaci (treba ten z doctrine), nakonec jsem to proste hodil do vice anotaci
/**
* @secured
* @role(foo, bar)
*/
- nanuqcz
- Člen | 822
Díky, nakonec jsem to vyřešil takto:
/**
* @secured(role=member|admin|superadmin)
*/
a řetězec 'member|admin|superadmin'
si už pak rozparsuji ručně. Nemusím
kvůli tomu přidávat do projektu další knihovnu. A zároveň je hned na
první pohled jasné, že stačí, aby byl uživatel v jedné z těchto
rolí.
Editoval nanuqcz (21. 6. 2013 0:06)
- Reloecc
- Člen | 15
nanuqcz napsal(a):
Ahoj,
nevím jak (a jestli to vůbec jde) můžu do anotací dostat pole.
jen tak pro zajímavost (spíše pro nějaké budoucí návštěvníky než pro autora topicu), já použil:
/**
* @pole({i:2,"name":"já"})
*/
ze kterého jsem si regulárně vytáhl obsah závorek a decodnul z json..
Editoval Reloecc (16. 7. 2013 17:46)