Nette + Doctrine2 špatně funguje anotace

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

Vytvořil jsem si model v doctrine2 jako MappedSuperclass a začali mi blbnout anotace na presenterech.

Presenter:

/**
 * @Secured
 * @User(loggedIn)
 */
class DefaultPresenter extends \BasePresenter
{

}

a chyba zachycená laděnkou:

Doctrine\Common\Annotations\AnnotationException

[Semantical Error] The annotation "@Secured" in class Presenters\DefaultPresenter was never imported. Did you maybe forget to add a "use" statement for this annotation?

Zatím nechápu proč to tam padá, anotace jsem normálně v modelech používal, jen když jsem přidal inheritanční entitu tak to začalo blbnout. Konkrétně tato anotace entity:

/**
 * @ORM\Entity(repositoryClass="MediaRepository")
 * @ORM\Table(name="users_media")
 * @ORM\MappedSuperclass
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(type = "string", name = "media_type")
 * @ORM\DiscriminatorMap({ "avatars" = "Models\Users\Avatars\Avatar" })
 */

Nemá někdo tip kde hledat řešení?

frosty22
Člen | 373
+
0
-

Reader v Doctrine mapuje anotace na objekty, a pokud nenalezne konkrétní objekt, pak vyhodí tu chybu, kterou tam máš.

Předpokládám, že asi nechceš číst anotace presenteru přes Doctrine reader, ale tedy v místě, kde vytváříš instanci readeru musíš mít specifikovaný adresář(e), který má číst a tam nemá být adresář s presentery.

Podle mě to nemá nic společného se MappedSuperclass, pokud tedy nerozšiřuje entita ten presenter =) (= to je samozřejmě naprostý nesmysl)

akadlec
Člen | 1326
+
0
-

No s MappedSuperclass to souvislost nemá, ten sem používal i předtím, ale začalo to dělat po přidání:

 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(type = "string", name = "media_type")
 * @ORM\DiscriminatorMap({ "avatars" = "Models\Users\Avatars\Avatar" })
frosty22
Člen | 373
+
0
-

Tak pokud to dělá pouze jakmile tam jsou tyto řádky, tak to asi vážně netuším, sice jsem si teď hodně hrál s Doctrine anotacema a začal jsem je používat i pro své věci, ale tohlem i přijde dost zvláštní.

Bohužel discriminator jsem zatím nepoužil, a pokud tedy by se snažil číst anotace z té třídy Avatar, tak to by se ještě dalo pochopit, ale proč zrovna rozšířil čtení na třídu presenteru, to mě nenapadá.

Maximálně, ale to je velká hypotéza, že by měl namapovanou celou složku například „app“, či jakou má strukturu, a řešil ve výchozím stavu pouze objekty obsahující USE statement pro mapping Doctrine, ale poté co je použita tato anotace DiscriminatorMap, tak začne číst vše – ale tak či tak, nezdá se mi to a nevím.

Mít tento problém já, tak bych se prioritně podíval na nastavení cest k entitám.

akadlec
Člen | 1326
+
0
-

@frosty22:
tak měl si pravdu, sice sem měl v configu zadefinovány entityDirs ale extensions k nim ještě natvrdo přidalo adresář app takže to dělalo s anotacema nad celým projektem

akadlec
Člen | 1326
+
0
-

@Patrik Votoček: dík za tip, teď se mi to hodilo, protože po tom co jsem nahrál funkční skripty na server začal zase řvát anotation reader že nezná anotaci @date co používám v hlavičce třídy. Nechápu, na localu no problém a na ostrém to dělá bordel.