Rôzne namespace pri Doctrine 2 entitách, ako na to?

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

Ahojte,

Dajme tomu, že mám klasický rozdelenú admin časť aplikácie napríklad na:

  • UserModule
  • MultimediaModule
  • InvoiceModule
  • FooModule…

Každý Module má svoj namespace, ktorý má prefix napríklad UserModule.
Teraz ak pod konkrétny modul patria nejaké Doctrine 2 entity, tak by som ich napísal ako UserModule\Entities\User …

A teraz konkrétne by sme mali napríklad:

  • UserModule\Entities\User
  • MultimediaModule\Entities\Multimedia
  • InvoiceModule\Entities\Invoice

Všetko vyzeralo super až do chvíle, kým som nepoužíl:

public function __construct(EntityManager $em)
    {
	$this->em = $em;
	$this->userEntity = $em->getRepository(\UserModule\Entities\User::getClassName());
    }

a dostávam error: ** The class ‚UserModule\Entities\User‘ was not found in the chain configured namespaces App, Kdyby\Doctrine **

Kedysi som mal všetky entity v namespace App\Entities\Xyz a všetko fungovalo bez nejakých problémov, avšak troška som sa s tým hral a chcem si to takto upraviť…

Chcel by som sa teda opýtať, či už náhodou niekto neriešil podobný problém nastavenia mappingu pomocou nejakej masky v configu, alebo potom či je možné túto path k entitám pridať napríklad cez Extension ku každému modulu zvlášť :)

Ďakujem

F.Vesely
Člen | 369
+
0
-

Jde to jak v configu:

doctrine:
    metadata:
        UserModule: %appDir%/UserModule
		MultimediaModule: %appDir%/MultimediaModule

nebo kdyz mas Extension:

class UserModuleExtension extends Nette\DI\CompilerExtension implements \Kdyby\Doctrine\DI\IEntityProvider
{
	function getEntityMappings()
	{
		return [
			'UserModule' => __DIR__ . '/../Entities'
		];
	}
}
iNviNho
Člen | 352
+
0
-

Ak to bude fungovať, tak ti kupim pivo :-) Zajtra v robote to hned vyskúšam :)

iNviNho
Člen | 352
+
0
-

Opýtam sa ešte

class User extends \DefaultModule\Entities\DefaultEntity {

    use \Kdyby\Doctrine\Entities\MagicAccessors;

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue
     */
    protected $id;

    ...

    /**
     * @ORM\OneToMany(targetEntity="Log", mappedBy="user")
     * @ORM\OrderBy({"datein" = "desc"})
     */
    protected $logs;

Dostávam error: The target-entity UserModule\Entities\Log cannot be found in ‚UserModule\Entities\User#logs‘

Akonáhle prepíšem targetEntity na „LogModule\Entitites\Log“ tak to šlape, vyzerá to tak, že má problém s rôznymi namespaces, ale napadá ma potom, že to až taký problém nie je a v tej entite môžem pekne vidieť odkiaľ sa ta entita berie..

F.Vesely
Člen | 369
+
+1
-

Tohle neni chyba, to je spravne chovani. Davas tam zavislost na jiny namespace.

iNviNho
Člen | 352
+
0
-

Dakujem za pomoc, done :)