Hogyan adjam át a bejelentkezéshez/regisztrációhoz szükséges paramétereket MVC tervezési mintában a modelnek?
Tegyük fel most ez az URL:
www.example.com/index.php?page=login&action=login
A core.php-ban kezelem az URL-t, ahol megnézem, hogy létezik-e a $_GET["page"] vagy $_GET["action"]. Ha az $_GET["page"] létezik, meghívom a pageController-t, ha az $_GET["action"] létezik, meghívom az actionControllert.
Nos jelenesetben létezik a $_GET["page"] és a $_GET["action"] is szóval a pageController a loginPageTemplate-t tölti be az actionController meg a loginController-t hívja meg.
Core.php (részlet):
$page = isset($_GET["page"]) ? $_GET["page"]: "index";
$getPage = new pageController($page);
echo $getPage->getPage(); //Azért echo, mert a getPage returnol ob_get_content-tel és így írja ki az oldalt.
if(isset($_GET["action"]){
$action = $_GET["action"];
$getAction = new $action."Controller";
if($getAction == "login"){
$getAction->setDatas($_POST["username"],$_POST["password"]);
}
}
Nincs ennél jobb megoldás? Mert ha pl rengeteg formom lenne akkor megtelne a core.php ezekkel. És így azt sem tudom leellenőrizni, hogy elküldte-e a formot, mert ha simán csak beírja azt hogy index.php?action=login akkor már nem is létezik a $_POST["username"] és az $_POST["password"]. Még arra gondoltam, hogy csak az $_POST tömböt adom át ha formmal tér vissza:
if(isset($_GET["action"]){
$action = $_GET["action"];
$getAction = new $action."Controller";
if($getAction == "formPOST"){
$getAction->setDatas($_POST);
} else if($getAction == "formGET"){
$getAction->setDatas($_GET);
}
}
Itt kicsit sok fogalom és képzavar van.
Ha a page meghatározza a kontrollert, akkor az action-nel ne egy másik kontrollert határozz meg, hanem a már meghívott kontroller egy metódusát.
pl a login kontroller osztálynak ( class loginController ) több metódusa is lehet, amelyek a műveleteket irányítják.
Az index metódus ( public function index() ) tartalmazza a bejelentkező formot hívó részt, ami meghívja a view/login/loginform.php fájlt
A további metódusok pedig a műveleti dolgokat pl a formsubmit metódus ( public functin formsubmit() ) az elküldött form adatainak feldolgozását végzi, a login modelljének ( class loginModell ) átadja $_POST-ot, ami elvégzi a bejelentkeztetést, vagy hibaüzenetet ad vissza, amit a loginController formsubmit metódusa aztán értelmez, és úgy továbbít, hogy vagy egy megfelelő üdvözlő oldalra irányít, vagy újraadja a formot, kiírva a hibaüzenetet a sikertelen bejelentkezésről.
A loginController osztálynak további metódusai is lehetnek a jelszó-visszaállításhoz, regisztrációhoz, stb...
Az egyes kontrollereket és modelleket (ahogy view-okat is) külön mappákba/fájlokba érdemes rendezni, és mindig csak azt betölteni, amire szükség van, különben ahogy írtad a "Core"-od meg fog telni szeméttel.
Egyébként a modellek már csak POST adatokat kapjanak, az oldalvezérlést és az alapbeállításokat az inicializációs részben (még a kontroller hívás előtt) érdemes $_SESSION-ökbe tölteni.
Javaslom ezt a tutorialt nézd át, hogyan csinálja a srác:
Elég alap, de a lényeg benne van.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!