Repositories / Doctrine2 getClassName
- KristianSubweb
- Člen | 146
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 | 1280
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 | 146
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ístoDefaultModule\Entities\Menuitem
budeš mít něco jako\DoctrineProxy\DefaultModule\Entities\Menuitem
Případně v doctrine entitách a final třídáchself::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žijestatic::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