Sto cercando di imparare come funziona il pattern MVC, quindi ho giocato un po '. Ho appena scritto questo, che aveva senso per me, fino a quando non volevo visualizzare il contenuto dell'array che è stato raccolto dalla classe Controller tramite il metodo View class output()
.
<?php
class Model {
public $arrayPeople = array(
1 => 'Dave',
2 => 'Burt',
3 => 'Jack',
4 => 'Michael',
);
public $arrayAnimals = array(
1 => 'Fish',
2 => 'Cat',
3 => 'Dog',
4 => 'Tiger',
);
}
class Controller {
private $model;
public function __construct( $model ){
$this->model = $model;
}
public function getArray( $arrayName )
{
return $this->model->$arrayName;
}
}
class View {
private $model;
private $controller;
public function __construct( $model, $controller ){
$this->model = $model;
$this->controller = $controller;
}
public function output()
{
echo '<a href="?action=getArray&value=arrayAnimals">arrayAnimals</a><br/>';
echo '<a href="?action=getArray&value=arrayPeople">arrayPeople</a><br/>';
}
}
$model = new Model;
$controller = new Controller( $model );
$view = new View( $model, $controller );
if (isset($_GET['action']) && !empty($_GET['action'])) {
$controller->{$_GET['action']}($_GET['value']);
}
echo $view->output();
Aggiorna Ho appena trovato questo in linea, che sembra suggerire che la vista dovrebbe "tirare" i dati dal modello?
class View
{
private $model;
public function __construct($model) {
$this->controller = $controller;
$this->model = $model;
}
public function output(){
$data = "<p>" . $this->model->tstring ."</p>";
require_once($this->model->template);
}
}
Questo è confusionario come Paul Hegarty su iTunes U - 'Developing Apps for iOS' (video di conferenza 1), dice che il Modello e la Vista non dovrebbero mai comunicare e il flusso di informazioni dovrebbe sempre viaggiare attraverso il Controller? Ma l'esempio mostra la comunicazione diretta tra la vista e il modello.