Jak si vložit vlastní třídu dostupnou ve všech třídách
- kerim.22
- Člen | 16
Dobrý den, mám eshop a v každém presentéru se musí načítat košík do headeru, do headeru taky chci načítat kategorie, jak to udělat aby se nějakou třídou načítal košík i kategorie a vložit to do každého presentéru? Zkoušel jsem přidat třídu ale píše mi to že class not found, jsem bezradný, jak přidat třídu do nette?
- GEpic
- Člen | 566
kerim.22 napsal(a):
GEpic napsal(a):
nepoužívej constructory v presenterech! :)
zkus třeba beforeRender() metodu, nebo startup()…
Nebo si na to vytvoř komponentu, kterou budeš inicializovat už v BasePresenteru.
Jako pomocí createComponent ?
Ano, záleží co vše chceš aby to dělalo / nedělalo.
Editoval GEpic (21. 8. 2016 22:55)
- kerim.22
- Člen | 16
GEpic napsal(a):
kerim.22 napsal(a):
GEpic napsal(a):
nepoužívej constructory v presenterech! :)
zkus třeba beforeRender() metodu, nebo startup()…
Nebo si na to vytvoř komponentu, kterou budeš inicializovat už v BasePresenteru.
Jako pomocí createComponent ?
Ano, záleží co vše chceš aby to dělalo / nedělalo.
Mám metodu načtiKošík() která vrací kolik je zboží (v jaké
hodnotě) v košíku.
K tomu abych to přidal do dalšího presentéru musim to přidávat mockrát,
chtěl bych aby ta komponenta měla v sobě metodu načtiKošík a byla
v basepresenteru abych jí nemusel dávat do každýho skriptu zvlášť,
poradíš mi ?
- Rob Bob
- Člen | 60
Košík bych asi řešil jako službu, vytvořil bych si třídu „ShoppingCart“ (do té např. předat session nebo připojení na ukládání dat) a do BasePresenteru bych ji injectoval a dál už se nemusíš o nic starat.
<?php
/** @var \Namespace\ShoppingCart @inject */
public $shoppingCart;
?>
Pak kdekoliv v dědícím presenteru můžeš přistoupit ke košíku a volat jeho metody, např.:
<?php
public function acitonDefault() {
$this->template->items = $this->shoppingCart->getItems();
}
?>
edit: fixed typos a ještě přidám jak by např. mohl vypadat konstruktor třídy shoppingCart
<?php
namespace Namespace;
class ShoppingCart {
/** @var \Nette\Http\SessionSection */
private $cart;
public function __construct(\Nette\Http\Session $session) {
$this->cart = $session->getSection('shoppingCart');
}
}
?>
A tuto třídu ještě zaregistruješ v config.neon do sekce services, session se do konstruktoru předá autowiringem:
services:
shoppingCart: Namespace\ShoppingCart
Editoval Rob Bob (22. 8. 2016 15:35)