• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sprawdzenie poprawności MVC PHP oraz kilka pytań.

Object Storage Arubacloud
+2 głosów
220 wizyt
pytanie zadane 10 lipca 2015 w PHP przez Hatter Gaduła (3,180 p.)

Cześć,

w poprzednim temacie spytałem sie Was o naukę wzorca MVC. Poczytałem o nim i zrozumiałem część teoretyczną a dzisiaj zabrałem się za część praktyczną. Napisałem prostą (nawet nie ;p) stronę korzystająć z tego wzorca i prosił bym Was o wypowiedzenie się czy dobrze zrozumiałem istotę MVC.

index.php

<?php
require_once('controller.php');

$cont = new Controller(); //displaing page
?>

controller.php

<?php
require_once('model.php');
require_once('view.php');
class Controller
{
	private $model;
	private $view;	
	
	public function __construct()
	{
		$this -> model = new Model();
		$this -> view = new View($this -> model -> getVar1(), $this -> model -> getVar2());
		$this -> view -> displayView();
	}
}
?>

model.php

<?php
class Model
{
	private $var1;
	private $var2;
	
	public function __construct()
	{
		$this -> generateStuff(); //it's will changed in the future ;p
	}
	
	public getVar1()
	{ return $this -> var1; }
	
	public getVar2()
	{ return $this -> var2; }

	private generateStuff()
	{
		/*
			Here you can implement code to fetch data from file, web page, database or soo.
		*/
		$this -> var1 = "This is some title"; //like i said you can implement here other stuff
		$this -> var2 = "Hello, greetings from function in model ;)";
	}
}
?>

view.php

<?php
class Model
{
	public $var1;
	public $var2;
	
	public function __construct($VAR1, $VAR2)
	{
		$this -> var1 = $VAR1;
		$this -> var2 = $VAR2;
		$this -> displayView();
	}
	private function displayView()
	{
		echo <<<START
		<html>
			<head>
				<title>{$this -> var1}</title>
			</head>
			<body>
				<h1>{$this -> var2}</h1>
			</body>
		</html>
START;
	}
}
?>

 

Mam też kilka pytań. Czy nowy widok musi się równać nowemu plikowi (np. onas.php - jako widok)?

Czy może być taka sytuacja gdzie będą dwa modele?

1 odpowiedź

+3 głosów
odpowiedź 10 lipca 2015 przez Comandeer Guru (601,110 p.)
wybrane 10 lipca 2015 przez Hatter
 
Najlepsza

Czy nowy widok musi się równać nowemu plikowi (np. onas.php - jako widok)?

Zwykle jest jedna klasa View, która generuje dany typ odpowiedzi (zatem HTML, Atom itd.). Najczęściej sprowadza się to do tego, że wewnątrz wywołuje system szablonów i zwraca odpowiednią treść.

 Czy może być taka sytuacja gdzie będą dwa modele?

Może być, np. pobierasz dane z dwóch źródeł: tweety z Twittera i wpisy z FB. Są to dwa odrębne źródła danych, więc będą to dwa modele.

 

Tak na oko jest dobrze. Model pobiera dane, widok je wyświetla i pośredniczy w tym kontroler. Jednak co do klasy View: w konstruktorze nie powinna sobie od tak generować treści. Konstruktor to konstruktor. Natomiast metoda generująca treść powinna ją generować i zwracać (return zamiast echo) - zawsze się może zdarzyć, że kontroler potrzebuje tego nie do wyświetlenia w przeglądarce, ale np. do wygenerowania maila.

komentarz 10 lipca 2015 przez Hatter Gaduła (3,180 p.)

To co wtedy wyświetla widok jak zwracam go poprzez return?

komentarz 10 lipca 2015 przez Comandeer Guru (601,110 p.)
Nic. To kontroler decyduje jak i kiedy wyświetlić widok. Widok ma po prostu mu zwrócić wygenerowaną treść
komentarz 10 lipca 2015 przez Hatter Gaduła (3,180 p.)
Możesz pokazać to na moim kodzie jak to by było (decyzje kontrolera nt. wyświetlania widoku).
komentarz 10 lipca 2015 przez Comandeer Guru (601,110 p.)
public function __construct()
    {
        $this -> model = new Model();
        $this -> view = new View($this -> model -> getVar1(), $this -> model -> getVar2());
        echo $this -> view -> displayView();
    }

BTW teraz widzę: kontroler raczej tego typu rzeczy trzyma w innych metodach. Zwykle jest konwencja: jeden adres = jedna metoda (np adres /kontakt, więc i metoda kontakt)

komentarz 10 lipca 2015 przez Hatter Gaduła (3,180 p.)

Okej teraz rozumiem. Wiesz gdzie mogę jeszcze zobaczyć przykład operacji na takich szablonach wewnątrz klasy view?

komentarz 10 lipca 2015 przez Comandeer Guru (601,110 p.)
Obadaj jak to załatwiają frameworki po prostu ;)

Podobne pytania

0 głosów
5 odpowiedzi 1,632 wizyt
+1 głos
1 odpowiedź 229 wizyt
pytanie zadane 31 lipca 2015 w PHP przez Ivan Maniak (60,650 p.)
0 głosów
3 odpowiedzi 713 wizyt
pytanie zadane 27 czerwca 2022 w PHP przez everstudybee Użytkownik (610 p.)

92,566 zapytań

141,420 odpowiedzi

319,611 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...