Diskuze: PHP - MVC - Mechanismus zpráv
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Spousta lidi ten clanek nema koupeny. Zadny svuj kod jsi nedal. Takze, tezko
rici, kde delas problem. V tuto chvili ti nejspis muze poradit jen autor clanku.
On pojmenovaval a vytvarel tridy. Je to asi stejne, jako rikat mechanikovi, ze
ti nejede autak a nechat ho doma zavreny v garazi
Tva myslenka je spravna, aby zpracovani zprav resila samostatna trida.
Kontroler, at uz to autor clanku pouzil v jakemkoliv smyslu, tak by se asi mel
starat jen o obsluhu.
V podstate asi popisujes neco podobneho, co jsem resil u chatu. Tam jsem mel
take tridu, ktera se starala o zpravy, jinou, ktera resila seznam uzivatelu,
update, zobrazovani na obrazovku a tak. A pak tam byla trida, ktera resila
prenos a posilala data na uzivatele nebo na zpravy na obrazovku. U chatu se tam
pouziva nejake xor sirfrovan, tak nejdriv zpravu dekodovalo, vyhodnotilo a pak
volalo tridy.
Tohle ti třeba pomůže. Stačí třídu zavést v hlavním kontroleru. Jen si domysli předání na view.
Např:
public SessionMessage $sessionMessage;
$this->sessionMessage = new SessionMessage();
SessionMessage.php
class SessionMessage
{
protected const FLASH_KEY = 'flash_messages';
public function __construct()
{
session_start();
$flashMessages = $_SESSION[self::FLASH_KEY] ?? [];
foreach ($flashMessages as $key => &$flashMessage) {
$flashMessage['remove'] = true;
}
$_SESSION[self::FLASH_KEY] = $flashMessages;
}
public function setFlash($key, $message)
{
$_SESSION[self::FLASH_KEY][$key] = [
'remove' => false,
'value' => $message
];
}
public function getFlash($key)
{
return $_SESSION[self::FLASH_KEY][$key]['value'] ?? false;
}
public function __destruct()
{
$this->removeFlashMessages();
}
private function removeFlashMessages()
{
$flashMessages = $_SESSION[self::FLASH_KEY] ?? [];
foreach ($flashMessages as $key => $flashMessage) {
if ($flashMessage['remove']) {
unset($flashMessages[$key]);
}
}
$_SESSION[self::FLASH_KEY] = $flashMessages;
}
}
Následně nastavíš v potřebném kontroloru takto:
$this->sessionMessage->setFlash('warning', 'Tvá zpráva');
Výpis:
$this->sessionMessage->getFlash('warning')
Zobrazeno 3 zpráv z 3.