Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Web-sivusto MVC-mallilla

late [23.02.2014 11:03:30]

#

Hei,

Yritän tehdä nyt yksinkertaisen web-sivuston MVC-mallia käyttäen. Olen saanut käsityksen että include -komennon käyttäminen on huono idea. Putkan oppaassa näin:

<?php
include("Malli.php");
include("Ohjain.php");

$ohjain = new Ohjain();
if (isset($_GET["toiminto"])) {
    $toiminto = $_GET["toiminto"];
} else {
    $toiminto = "lista";
}
$ohjain->$toiminto();
?>

Eli enkö voisi tehdä samalla logiikalla omat kotisivut?

include("header.php");
include("footer.php");

Metabolix [23.02.2014 12:42:00]

#

Kyllä, voit tehdä samalla logiikalla omat kotisivusi. Kuitenkin epäilen, että et ole ymmärtänyt, mikä se logiikka on.

Pakkohan includea on jollain tavalla käyttää, kun koodi on monessa tiedostossa. Huono idea on se, että include-komentoja ripotellaan ympäri koodia ja että include-rivillä tapahtuu jotain fyysisesti näkyvää.

Tavallisesti liitettävän tiedoston pitää sisältää pelkästään luokkia tai funktioita, ei mitään muuta koodia. Näin olio-ohjelmoinnin aikakaudella on tapana, että yksi tiedosto sisältää yhden luokan, esimerkiksi Ohjain.php sisältää luokan Ohjain. Nämä kooditiedostot liitetään yleensä joko heti alussa tai autoloadilla, ja includen tilalle sopii loogisesti paremmin require_once.

Poikkeuksena sääntöön ovat HTML-templaatit (näkymät), joiden taas pitää yleensä sisältää lähes pelkästään HTML-koodin tulostusta ja vain välttämätön PHP-koodi tulostukseen liittyviä muuttujia, ehtoja ja silmukoita varten. Näiden templaattien käyttöön on syytä tehdä erilliset funktiot, jotta tarvittavat muuttujat voi antaa parametreina eikä templaateissa söhlätä globaaleilla muuttujilla. (Erilaisten täsmällisten toteutusten mahdollisuuksista ja rajoituksista on jo riidelty, joten ei mennä siihen.)

Putkan PHP-oppaan MVC-esimerkissä includen käyttö on siis suurin piirtein hallinnassa: ensimmäiset includet liittävät pelkästään luokkia, ja ohjaimessa liitetään includella yhden sivun näkymä, joka on lähes pelkkää HTML-koodia.

The Alchemist [23.02.2014 15:07:29]

#

Php:ssä kun on tämä mahdollisuus ns. autoloaderin käyttöön ja se on myös standardoitu (PSR-4), niin sitä kannattaisi mielestäni opetella käyttämään olio-ohjelmoinnissa manuaalisten includejen sijaan. Ja siihen liittyen myös nimiavaruudet voivat tulla hyödyllisiksi luokkien määrän kasvaessa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta