Jak si vložit vlastní třídu dostupnou ve všech třídách

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kerim.22
Člen | 16
+
0
-

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

Pokud je to globálně, tak to načti v BasePresenteru

kerim.22
Člen | 16
+
0
-

GEpic napsal(a):

Pokud je to globálně, tak to načti v BasePresenteru

V basepresenteru sem to zkoušel to bylo první co mě napadlo, ale když dám do konstruktoru DIE skript se nezastaví to znamená že tento konstruktor mi nepomůže

GEpic
Člen | 566
+
0
-

nepoužívej constructory v presenterech! :)

zkus třeba beforeRender() metodu, nebo startup()…

Nebo si na to vytvoř komponentu, kterou budeš inicializovat už v BasePresenteru.

Editoval GEpic (21. 8. 2016 22:41)

kerim.22
Člen | 16
+
+1
-

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 ?

GEpic
Člen | 566
+
0
-

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

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 ?

CZechBoY
Člen | 3608
+
0
-

Přes inject metody/property si předej továrničku do BasePresenteru a vytvoř v něm i createComponentXXX metodu.

Rob Bob
Člen | 60
+
+3
-

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)