Doctrine ORM a latte šablóna s getterom
- jaro
- Člen | 12
Zdravím,
Chcem sa spýtať jednu vec na ktorú som nenašiel definitívnu
odpoveď,
dúfam že to niekto zhrnie…
Chcel som preportovať projekt z Nette 2.3 do 3.0 a chcel by som vedieť
či sa dá v projekte používať v šablóne latte automatický getter
teda ak chcem pristupovať na $entita->getName()
či sa dá
nejak pristupovať aj cez $entita->name
, bez použitia nejakej
mágie ako MagicAccessors.
V latte šablónach mi prestali fungovať jednoducho prístupy bez getterov ale
je to hodne starý projekt tak je možné že som to vtedy riešil tiež nejakou
mágiou…
- Marek Bartoš
- Nette Blogger | 1274
To co používáš v php můžeš použít i v latte, latte žádný magický přístup k proměnným nepřidává.
Můžeš tedy jít jednou z těchto cest:
- properties udělat public (pokud to není s Doctrine problém, nevím)
- použít gettery
- přidat do třídy traitu
SmartObject
a doplnit nad třídu@property
/@property-read
anotace, aťSmartObject
ví, že má zavolat getter (v Nette 2.3 se myslím v předkovi SmartObjectu zvaném Object existence anotací nekontrolovala, tak jsi možná narazil na toto)
Editoval Marek Bartoš (25. 1. 2022 16:46)
- jaro
- Člen | 12
Ďakujem, za odpoveď ale asi som sa vyjadril, ja tie gettery mám napísane
ale jednoducho prístup bez $entita->getName() teda $entita->name
nefunguje. Takže ak som správne pochopil tak trieda by mala vyzerať napr.
takto:
Už som pochopil v čom spočívala tá mágia :), BaseEntita v starom
projekte dedila od Nette\Object…
/**
* @ORM\Entity(repositoryClass="App\Model\Database\Repository\SuffixRepository")
* @ORM\HasLifecycleCallbacks
*/
class Suffix extends AbstractEntity
{
use Tid;
use Nette\SmartObject;
public function __construct($text)
{
$this->text = $text;
}
/**
* @ORM\Column(type="string")
*/
protected $text;
public function getText()
{
return $this->text;
}
}
Alebo možno stačí použiť traitu v AbstractEntity…