Práca s Nette\SmartObject
- Danndy
- Člen | 35
Zdravím,
mám problém s používaním Nette\SmartObject. Mám nasledovnú triedu :
Následne chcem iba jednoducho vytvoriť objekt tejto triedy a naplniť hodnoty pomocou funkcie nasledovne:
Padá mi to na riadku
$video->setDescription($values->description);
a hlási chybu
Call to undefined method
App\Entity\Video::setDescription().
Kde robím chybu, a prečo mi to pre atribút $title
funguje ale
pre daľšie adtribúty už nie? Resp. ako pracovať s takýmto objektom aby
som gettery a settery mohol volať priamo cez
$obj->attr1 = 'val'
?
Vopred ďakujem za odpovede.
- h4kuna
- Backer | 740
SmartObject funguje tak že ti nedefinuje setter metody, ale když je máš nadefinovaný tak k názvům metod můžeš přistupovat jako k vlastnostem objektu.
Pokud si do Video entity napíšeš setter setDescription tak můžeš následující.
Ale to že ti chybí metoda setDescription je momentálně správně.
Editoval h4kuna (24. 1. 2017 14:48)
- matopeto
- Člen | 395
Danndy napsal(a):
Dik za odpoveď. A je nejaká dostupná možnost v nette 2.4 volať setter bez toho aby som ho definoval? Tiež stále nechápem, prečo mi to pre prvý atribút
$title
prešlo nakľko nemám definovaný žiadny setter ani pre tento atribút.
Preco by si chcel volat setter ked nie je definovany :) ked ho chces tak si ho definuj alebo volaj na priamo, ziadne taketo magie nechces :), i ked si myslis ze chces, tak nechces :)
- Marek Bartoš
- Nette Blogger | 1297
Pokud takovou magii přece jen chceš (vážně nechceš), tak se to dá řešit přes __get a __set, ale bez použití SmartObject
- Marek Šneberger
- Člen | 130
Můžeš použít traitu Kdyby\Doctrine\Entities\MagicAccessors
,
která tuhle magii definuje.
Ale nedoporučuju, raději si ty settery a gettery vygeneruj. V PHPStormu je to
na pár ťuknutí do klávesnice, ani to reálně psát nemusíš.