IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jaromír Křivánek:29.11.2022 13:35

Jedu kurz PHP-MVC a dostal jsem se až k mechanizmu zpráv. Vyřešil jsem s pomocí předchozího kurzu i rozdělení zpráv dle typu, jak bylo požadováno za domácí úkol. :) Teď jsem se ale rozhodl, že by bylo hezké, vše co se týče zpráv vypreparovat z třídy Kontroler a vytvořit samostatnou třídu SpravceZprav. Otázka tedy je, jestli tato úvaha je správná a jak to vlastně udělat, aby mi zprávy fungovaly ve všech kontrolerech. Jak to udělat správně?

Zkusil jsem: Zkoušel jsem vyvolat třídu v konstruktoru třidy Kontroler. Pak se mi ale nepodařilo rozjet aplikaci vůbec.

 
Odpovědět
29.11.2022 13:35
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:30.11.2022 7:55

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.

 
Nahoru Odpovědět
30.11.2022 7:55
Avatar
Ondřej Nyklíček:16.1.2023 18:49

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')
 
Nahoru Odpovědět
16.1.2023 18:49
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.