Po redirect se nezobrazí flashMessage
- andros
- Člen | 145
Ahoj,
v šabloně @layout.latte zobrazuji počet příspěvků. Abych tuto
hodnotu nemusel posílat šabloně v každém presenteru, udělal jsem si
v BasePresenteru metodu injectCount ve které je následující:
public function injectCount()
{
$this->template->count = '51';
}
Problém je, že v tu chvíli se přestanou zobrazovat FlashMessage po redirectu. Jakmile v metodě inject zakomentuji předání hodnoty do template , nebo dám pryč redirect , vše funguje jak má.
Poraďte mi prosím, jak mám předávat do šablony počet příspěvků tak aby FlashMessage fungoval a nemusel jsem to vkládat v každém presenteru zvlášť.
Díky za radu.
- andros
- Člen | 145
Díky za radu. Už to vypadá líp. Jak mám ale v metodě beforeRender načíst z data z nějaké modelové třídy ?
Metoda inject vypadala nějak takto:
public function injectMetoda(msgModel $msgModel)
{
$this->msgModel= $msgModel;
$this->template->msg = $this->msgModel->getMsg();
}
metodu beforeRender ale nemůžu volat s parametry
Editoval andros (17. 1. 2017 21:38)
- kejlicz
- Člen | 201
Tou metodou inject dostaneš do BasPresenteru ten msgModel. S tím pak můžeš kdekoliv pracovat
$this->msgModel->metoda()
V té inject metodě získáváš jen službu. Samotná data z té služby už taháš jinde, kde je potřeba. Třeba v tom beforeRender()
public function beforeRender()
{
$this->template->msg = $this->msgModel->getMsg();
}
- andros
- Člen | 145
Mám to takhle:
Model:
namespace App\Model;
use Nette;
abstract class Manager {
use Nette\SmartObject;
/** @var Nette\Database\Context */
protected $connection;
public function __construct(Nette\Database\Context $db) {
$this->connection = $db;
}
}
namespace App\Model;
class BasketManager extends Manager
{
public function getBasketGuest($id)
{
return $this->connection->table('basket')
->where('guest_id', $id);
}
}
basePresenter:
namespace FrontModule;
use App\Model\BasketManager;
use \Nette\Application\UI\Presenter;
/**
* Base presenter for all application presenters.
*/
abstract class BasePresenter extends Presenter
{
private $basketManager;
private $guest;
private $basket;
private $basketCount;
public function injectGuestCookies(BasketManager $basketManager)
{
$this->basketManager = $basketManager;
}
public function beforeRender()
{
$httpRequest = $this->context->getByType('Nette\Http\Request');
$httpResponse = $this->context->getByType('Nette\Http\Response');
if ($httpRequest->getCookie('guest')) {
// Cookies košíku existuje
$this->guest = $httpRequest->getCookie('guest');
}
else {
// Cookies košíku neexistuje, nastavíme
$this->guest = $httpResponse->setCookie('guest', uniqid(),'7 days');
}
$rows = $this->basketManager->getBasketGuest($this->guest);
$this->basket = $rows;
$this->template->basketCount = count($rows);
}
}
- JZechy
- Člen | 161
@andros Když k těm privatům doplníš PHPDoc, např:
abstract class BasePresenter extends Presenter
{
/**
* @var BasketManager
*/
private $basketManager;
// ...
Tak IDE bude v tu chvíli vědět, co je ten atribut za typ a je schopen ti napovídat public metody i atributy, který ten objekt v proměnné nabízí.
Jestli to máš takhle čistě, tak jak říkám, IDE nemá křišťálovou kouli a ze setterů nebo inject metod není schopno doplnit typ atributu.
Editoval JZechy (17. 1. 2017 22:55)
- CZechBoY
- Člen | 3608
Funguje to tak, ze reknes idecku/programatorovi, ze v ty promenny/property
ocekavas typ XXX.
Takovehle komentare muzes psat i u metod – urcis jakyho typu maj byt
parametry a jakej typ metoda vraci.
Pokud nevadi anglictina tak vic info tady https://github.com/…ed/phpdoc.md
- andros
- Člen | 145
Protože s Nette teprve začínám , neustále procházím dokumentaci (https://doc.nette.org/cs/) a snažím se zjistit co všechno umí. Takže co nenajdu v dokumentaci, tak nevím. Pokud na to náhodou nenarazím na fóru. Třeba že existují gettery
$this->getHttpRequest();
$this->getHttpResponse();
v dokumentaci nenajdeš.
Editoval andros (18. 1. 2017 12:29)
- CZechBoY
- Člen | 3608
jj, pro nováčky je api peklo :-)
V presenteru je hodně věcí dostupných – request, response, session,
user, template aj. Ostatní si musíš předat přes konstruktor/inject.
Jinak pár taháků:
https://ondrej.mirtes.cz/…tsheet-tahak
https://phpfashion.com/…-presenterum
http://nette.matej21.cz/cs/di