Zapsání pole pomocí anotace

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

Ahoj,

šlo by nějak rozumně zapsat pole do anotace? Po vzoru Doctriny bych chtěl sypat data z anotací do „entit“, což jsem naimplementoval snadno, ale teď řeším jak udělat pole, něco ve stylu:

use App\Annotations\Secured;

/**
 * @Secured(loggedIn=TRUE, roles=['admin', 'moderator'])
 */
class DefaultPresenter {

}

Ideální by byla i možnost zapsat objekt v JSONu, např.:

/**
 * @Secured(loggedIn=TRUE, options={"strict": TRUE, "foo": "bar"})
 */

Bohužel parser zjevně kouskuje anotace podle čárky, takže se vytváří položky s hodnotou „‚moderator‘]“ apod., no nějak mě nenapadá, jak to rozumně pojmout.

Nemá někdo nějaký nápad jak to udělat v Nette? Nechtěl bych jen kvůli parseru tahat celou Doctrinu když Nette obsahuje solidní parser, jen trošičku nedodělaný IMO :-)

Díky.

enumag
Člen | 2118
+
+7
-

Vykašli se na vymejšlení kola a použij normálně anotace z Doctrine. ;-)

https://github.com/…/Annotations

EDIT: Rozhodně kvůli tomu nemusíš tahat celou doctrinu, anotace jsou samostatný balíček.

Editoval enumag (9. 2. 2015 19:00)

Zax
Člen | 370
+
0
-

Já to mám udělaný tak, že ty „entitní“ třídy se tvoří přes generované továrničky, abych si do nich mohl strkat služby a rovnou dělat třeba ověření jestli je uživatel přihlášen apod. Půjde to i s Doctrine anotacemi? Mám tušení, že v Doctrině na to dostaneš jen hloupé přepravky a starej se sám někde v presenteru… :-/

enumag
Člen | 2118
+
0
-

Strkat do toho služby mi nepřipadá pěkné. Sám to používám jen jako hloupou přepravku a ke každé takové třídě mám handler právě na ty kontroly. V podstatě jako constrainty v symfony/validator.

Zax
Člen | 370
+
0
-

Rozumím a normálně bych asi i souhlasil, jenže v mé nové práci se nehledí moc na čistotu, potřebujem sypat jeden projekt za druhým a v porovnání s běžnými weby mají naše projekty jepičí život (proto taky hledám víc berliček v podobě anotací – člověk s nimi za krátkou chvíli udělá hodně parády). Psát přepravku i handler se popravdě moc nehodí. No, mrknu na to, zkusím nad tím udělat nějakou obálku a uvidím, jak to půjde. Asi to bude jednodušší než se snažit vymyslet pro pole syntaxi, kterou Nette nerozloží na nesmysly. Tak díky :-)

Filip Procházka
Moderator | 4668
+
0
-

Anotace jsou v Doctrine normální třídy, můžeš si s nimi dělat co chceš. Jediné pravidlo je že by neměly mít konstruktor, nebo by aspoň neměl mít žádné argumenty.