Repositories / Doctrine2 getClassName

KristianSubweb
Člen | 144
+
0
-

Ahojte chcel by som sa opýtať, pôvodne sme používali v Nette 2.4 knižnicu Kdyby/Doctrine. V konkrétnom repozitáre sme si vracali názov Entity triedy.

Takto vyzerá náš starý kód

<?php

namespace DefaultModule\Repositories;

use Nette,
    Nettrine\ORM\EntityManagerDecorator as EntityManager,
    Doctrine\Persistence\ObjectRepository as EntityRepository,
    DefaultModule\Entities\Menuitem;

class MenuitemRepository {

    use Nette\SmartObject;

    /**
     * @var EntityManager
     */
    private $em;

    /**
     * @var EntityRepository
     */
    private $menuitemEntity;

    public function __construct(EntityManager $em) {
        $this->em = $em;
        $this->menuitemEntity = $em->getRepository(Menuitem::getClassName());
    }

Pls neviete mi poradiť čím to treba nahradiť myslíte že takéto niečo može byť okey

class foo {
    function name()
    {
        echo "My name is " , get_class($this) , "\n";
    }
}

// create an object
$bar = new foo();

// internal call
$bar->name();

Len neviem či to nie je zbytočné reálne tú triedu aj vytvárať.

Neviete mi poradiť ako to riešite prosím?

Dik

Marek Bartoš
Nette Blogger | 1165
+
+1
-

Menuitem::class jste zkoušeli? :D
get_class($this) u doctrine entit nebude fungovat jak byste čekali – doctrine vytváří proxy třídy dědící tu originální, takže místo DefaultModule\Entities\Menuitem budeš mít něco jako \DoctrineProxy\DefaultModule\Entities\Menuitem
Případně v doctrine entitách a final třídách self::class. U jiných tříd, pokud mají odkazovat na reálně použitého potomka namísto třídy, ve které je kód definovaný se použije static::class

Editoval Marek Bartoš (27. 5. 2021 15:23)

KristianSubweb
Člen | 144
+
+1
-

Marek Bartoš napsal(a):

Menuitem::class jste zkoušeli? :D
get_class($this) u doctrine entit nebude fungovat jak byste čekali – doctrine vytváří proxy třídy dědící tu originální, takže místo DefaultModule\Entities\Menuitem budeš mít něco jako \DoctrineProxy\DefaultModule\Entities\Menuitem
Případně v doctrine entitách a final třídách self::class. U jiných tříd, pokud mají odkazovat na reálně použitého potomka namísto třídy, ve které je kód definovaný se použije static::class

:D :D :D už to mám mňa to vobec nenapadlo :D už je tok okey :D až sa smejem načo som sa opýtal :D