miras
6.10.2016, 09:01:19
Witam, piszę sobie mały skrypcik obiektowo w PHP i napotkałem pewien problem.
A mianowicie mam pewien plik index.php do którego są includowane pozostałe pliki - zależnie od tego, co podamy w gecie.
i chciałbym sobie napisać jakąś metodę wyświetlającą przekazane do niej komunikaty - czyli np.
public function showStatement($statement) {
return ($statement);
}
public function przykladowa($parametr) {
if ($parametr == 2) {
$this->showStatement("komunikat");
}
}
{ -> To jest index.php
W tym miejscu chciałbym wyświetlać komunikat.
{
-> Tu wywołuję przykladowa(2);
}
}
Ma ktoś jakiś fajny pomysł?
emstawicki
6.10.2016, 09:12:09
Skonstruuj porsty mechanizm oparty np. o sesje (coś a'la flashdata), które będzie gromadziło wiadomości do wyświetlania a po wyświetleniu czyściło tablicę wiadomości.
miras
6.10.2016, 09:49:49
Czyli po prostu w metodzie showStatement będę tworzył sesje z komunikatem, zrobię sobie kolejną metodę do wyświetlania komunikatu i np. przekażę zawartosc sesji do zmiennej, usunę tą sesje i zmienną z komunikatem zwrócę, dobre rozwiązanie?
emstawicki
6.10.2016, 10:04:37
Utwórz najlepiej to jako osobną klasę.
Stwórz sesję, która będzie tablicą komunikatów (treść, opcjonalnie typ).
W klasie metody do dodawania, zwracania. W konstruktorze czyść zawsze tablicę zapisaną w sesji (chyba że chcesz uwzględnić regenerowanie komunikatu).
Dodatkowo proponuję serializować dane podczas dodawania i formatować je dopiero podczas wyświetlania widoku komunikatu.
miras
6.10.2016, 10:21:26
Ok, jest to jakieś rozwiązanie, napisałem to na szybko i jest pewien problem.
ja chciałbym wyświetlać ten komunikat nad tym "includem" (wiem, że mogę to zrobić w css, ale nie chcę)
{ -> To jest index.php
W tym miejscu wywołuję showStatement i działa dopiero po odświeżeniu strony
{
-> Tu wywołuję przykladowa(2);
}
natomiast jeżeli wywołam showStatement w tym miejscu to już jest wszystko ok, bo tak naprawdę tworzę tą sesje gdzieś tam w środku tych "includowanych plików", to jest logiczne, że zadziała to tak, a nie inaczej, ma ktoś pomysł jak temu zaradzić?
}
nospor
6.10.2016, 10:24:35
Masz zle zaprojektowana aplikacje. Wypadaloby to poprawic poki to jeszcze jest na etapie rozwoju.
Najpierw logika aplikacji, dopiero potem wyswietlanie.
Teraz mieszasz jedno z drugim.
miras
6.10.2016, 10:30:48
Nie korzystam z żadnego fw ani nic w tym stylu, mam kilka metod, mam plik index.php, w którym jak już pisałem includuję pliki w zależności od tego, co podam w gecie i w tych plikach odpalam te metody, a w tych metodach dopiero tworzę komunikaty, w jaki sposób mógłbym to naprawić nie zaczynając tego od nowa ? :/
Jak tak teraz sobie myślę, będę musiał te includowane pliki rozbić na 2 - widok i logika, bo chyba nie będzie innej opcji?
nospor
6.10.2016, 10:33:38
Tak, by robic to poprawnie nie musisz uzywac zadnego FW jak nie chcesz.
Tak, musisz wpiero robic logike, potem wyswietlanie. Wpierw includujesz plik od logiki danej akcji, potem plik od widoku danej akcji.
miras
6.10.2016, 10:37:58
Dzięki
nospor
6.10.2016, 10:44:49
Kiedys splodzilem klase do widokow. Razem z klasa podalem przyglad malej aplikacji, w ktorej masz ladnie rozdzielona logike od widoku. Jak chcesz mozesz sobie przejrzec.
http://nospor.pl/klasa-widoku.html
emstawicki
6.10.2016, 11:00:54
Dokładnie jak @nospor nakreślił. Może w PHP długo szukać rozwiązania będącym całkowicie zgodne ze wzorcem MVC, ale poczytaj o nim i chociaż zobacz jak jakieś frameworki działają (nawet te proste). Wtedy Twoja nowa klasa do obsługi komunikatów będzie składową częścią rdzenia całej Twojej aplikacji.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.