Jump to content

PHP::MVC Kā nodot $_POST parametrus kontrolierim?


BlowMagnum
 Share

Recommended Posts

Sveiki,

Veidoju paštaisītu MVC sistēmu un šobrīd man index.php dokumenta ir sekojoša vienkārša forma:

 

<form action = "/hack/login/" method = "POST">
<label> Username </label>
<input type = "text" name = "username" Value = "laravel">
<label> Password </label>
<input type = "text" name = "password" Value = "pwd">
<input type = "submit" name = "submit" Value = "Submit">
</form>


Kā redzams formas action redirekto lietotāju uz /hack/login/ direktoriju, sekojoši manā pašveidotajā route.php failā esmu izveidojis sekojošu metodi:
 

class route {
    public static $validRoutes = array();

    public static function set($route, $function){
        self::$validRoutes[] = $route;
        $uri = $_SERVER['REQUEST_URI'];
        $uri = strtolower($uri);
        if ($uri == $route)
        $function->__invoke();
    }
}


Un attiecīgi routes.php failā izsaucu šo metodi sekojoši:
 

route::set("/hack/login/", function() {
  LoginController::registerUser($_POST['username'], $_POST['password']);
});


Šādā veidā padodot lietotāja ievadīto informāciju kontrolierim.
Tas protams strādā, taču jautājums vai ir kāds labāks - korektāks veids kā padot šo ievadi kontrolierim?
Turklāt, ja lietotājs bez redirekta pats ieies direktorijā /hack/login/ PHP atgriezīs erroru:
 

Notice: Undefined index: username in C:\wamp64\www\hack\routes.php on line 18
Notice: Undefined index: password in C:\wamp64\www\hack\routes.php on line 18

Jo protams attiecīgie lauki nav aizpildīti, 
Help!
 

Link to comment
Share on other sites

Liam Ethernety

Tava kļūda ir tā, ka tu gribi uz kontrolieri padot jau apstrādātus $username un $password, nevis kontrolierī darboties pa taisno ar $_POST.

Kāpēc tā ir kļūda?

Tāpēc, ka var būt daudz vairāk kā tikai divi $_POST input. Piemēram, reģistrējoties tu prasīsi arī gender, city, country, email preferences un tamlīdzīgi. Ar tavu esošo piegājienu tad nāksies uz registerUser kontroliera metodi padot 10+ parametrus, kas ir ļoti slikti.

 

Tātad, vienkāršotā variantā, nepadod uz kontroliera metodi nekādus parametrus. Kontroliera metodē piekļūsti uzreiz $_POST pa taisno (tas taču ir superglobal, pieejams visur).


Pirms 2 minūtēm , AndrisBB teica:

Vai tiesham 2020 vel tiek izmantotas php formas?

 

Pirms cilvēks nokļūst līdz kompilētam, reaktīvam javascript, REST API un SPA appām, domāju, ka parasts MVC ar php formām ir diezgan dabisks solis mācību procesā.

  • Atbalstu 1
Link to comment
Share on other sites

BlowMagnum
Pirms 14 minūtēm , Liam Ethernety teica:

Tava kļūda ir tā, ka tu gribi uz kontrolieri padot jau apstrādātus $username un $password, nevis kontrolierī darboties pa taisno ar $_POST.

Kāpēc tā ir kļūda?

Tāpēc, ka var būt daudz vairāk kā tikai divi $_POST input. Piemēram, reģistrējoties tu prasīsi arī gender, city, country, email preferences un tamlīdzīgi. Ar tavu esošo piegājienu tad nāksies uz registerUser kontroliera metodi padot 10+ parametrus, kas ir ļoti slikti.

 

Tātad, vienkāršotā variantā, nepadod uz kontroliera metodi nekādus parametrus. Kontroliera metodē piekļūsti uzreiz $_POST pa taisno (tas taču ir superglobal, pieejams visur).


Ahhh, tie taču ir superglobals, un tiešām ir pieejami visur, es biju pārpratis un iedomājies ka $_POST vērtības obligāti ir jānodod no dokumenta-dokumentā.
Šis glābj, paldies!

Link to comment
Share on other sites

Liam Ethernety
Pirms 8 minūtēm , BlowMagnum teica:


Ahhh, tie taču ir superglobals, un tiešām ir pieejami visur, es biju pārpratis un iedomājies ka $_POST vērtības obligāti ir jānodod no dokumenta-dokumentā.
Šis glābj, paldies!

 

Piebildīšu, ka, lai gan $_POST ir pieejams visur, atbilstoši MVC standartiem vienīgā vieta, kur tam vajadzētu/drīkst piekļūt, ir tieši kontrolieris. 

Nekādā gadījumā nedrīkst aiztikt $_POST tādās vietās kā Modelis vai papildus helper klases. Ar laiku sapratīsi, kāpēc.

Labots - Liam Ethernety
  • Patīk 1
Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...