ogólnie wg mnie nie ma do końca wyjaśnione co to jest mvc i jak dokładnie ma służyć, to po prostu są porady przydatne do pracy w większej ilości osób. Ja używam go tak :
mam 3 katalogi MODEL, VIEW, CONTROLLER oraz plik index.php
plik index.php składa się z :
require_once("head.html");
kod html od znacznika <HTML> do <BODY>
switch($_GET['akcja'])
{
case "firewall" :
require_once("controller\\firewall.php");
break;
case "filtrowanie_ruchu :
require_once("controller\\filtrowanie_ruchu.php");
break;
default:
require_once("controller\\index.php");
break;
}
require_once("footer.html");
Od znacznika </BODY> do znacznika </HTML>
Z funkcji widzenia php, wyświetlamy stronę gdzie brakuje nam zawartośći sekcji BODY -- tym zajmuje się switch.
zobaczmy jak przykładowo może wyglądać controller\\firewall.php
na starcie dajemy require_once("model\\firewall.php");
wiadomo klasy odpowiadzialen za połączenie z bazą.
następnie sprawdzamy przypłyneły do nas jakieś dane z POST gdyż masz 2 formularze (jak na zdjęciu)
robimy np. if(isset($_POST['fomularz1')) i sprawdzamy czy np. jest liczbą itd, robimy cała walidacje
a następnie korzystająć z klasy modelu wysyłamy zapytanie do MYSQL
$result = KLASA_MODEL->POKAZ_WSZYSTKIE_LOGINY;
$result obrabiamy w taki sposób, aby zostały nam tylko potrzebne informacje
teraz robimy require_once("view//firewall.php");
na starcie jako inny przycisk możemy dać link do
index.php?akcja=filtrowanie_ruchu
następnie tak jak wyżej funkcja zwraca nam wszystkie loginy
view\ firewall.php to ogólnie sam html ze wstawkami php bądź smarty
cały view\firewall to zawartość pomiędzy znacznikami BODY (patrz początek)
przykład view\firewall.php
jakiś kod html....
<?php for(int i=0; i< $result->num_rows; i++) ?>
<div id="login">
<?php echo($result[i]->nazwa_uzytkownika); ?>
</div>
jakiś kod html
Wiem, że opisane dość chaotycznie ale mam nadzieję, że chociaż w mały stopniu przybliżyłem Ci idee, ideą również jest, że grafik może robić widoki stron, a ty dopiero wstawkami z php będziesz go uzupełniał informacjami.
Ja aby oczyścić controllery z kodu stosuję pośrednictwo klasy (dość oczywiste)
wygląda to mniejwięcej tak, podam przykład na pliku do logowania usera
znaczynamy od index.php jest opisany wyżej
przekierowuje on do controllera\login.php
controller sprawdza tylko czy istnieje zmienna POST login i haslo i czy nie jest pusta, jeśli warunek przejdzie łączy się z klasą i wysyła jej informacje
zwrócone informacje są obrabiane na widok
index.php
jakiś switch : controller\\login.php;
login.php
require_once('class\\user.php');
if(isset($_POST['login]) && !empty($_POST['login']) && isset($_POST['haslo']) && !empty($_POST['haslo'))
{
$User = new User();
// z class\\user.php;
$result = $User->Zaloguj($_POST['login'],$_POST['haslo']);
// przekazujemy zmienne do klasy
// $result ma 1 gdy zalogowano i -1 gdy błąd loginu
}
jeśli mamy mamy duża funkcję która zwraca różne wyniki możemy wczytać parę widoków np.
if($result = -1) require_once('<b>view\\logownie\\niepowodzenie_logowania.php</b>');
elseif ($result = 1) require_once('<b>view\\logowanie\\login_poprawny.php</b>');
class\user.php
require_once('model\\user.php');
// link do zapytań związanych z zapytaniami do bazy
class User {
public function Zaloguj($login,$haslo)
{
tutaj wykonuję całą walidację danych, sha1($haslo) i inne głupoty
wykonujemy zapytanie do bazy danych
dodajemy do $_SESSION['zalogowany'] = user_id; // przykład
na samym końcu zwracamy 1;
}
}
zakładamy że zalogowaliśmy się poprawnie
view\login\login_poprawny.php
jakiś kod html
<?php echo('Witaj użytkowniku o id :'.$_SESSION['zalogowany']); ?>
jakoś kod html