Doctrine ORM a latte šablóna s getterom

jaro
Člen | 12
+
0
-

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
+
0
-

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
+
0
-

Ď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…