Sto cercando di imparare l'MVC di applicazioni web in PHP. La maggior parte degli articoli discussi sul pattern MVC 1-a-1 è stata fornita sotto
- Controller: ottiene la richiesta utente & aggiorna il modello,
- Modello: riceve gli ordini da Controller & aggiorna i dati.
- Visualizza: riceve i dati aggiornati da Model & mostralo.
Tuttavia, nel mio progetto MVC ho bisogno di creare una gerarchia di Views che mostri i loro dati corrispondenti dal livello Model come la struttura data sotto: [Nota: qui, tutti i tipi di modello e vista sono uguali. Non esiste un tipo diverso.]
$models = array();
$models[0] = array("id"=>1, "parent_id"=>null, "title"=>"R1","content"=>"This is Root content 1");
$models[1] = array("id"=>2, "parent_id"=>1, "title"=>"c2","content"=>"This is content 2");
$models[2] = array("id"=>3, "parent_id"=>1, "title"=>"c3","content"=>"This is content 3");
$models[3] = array("id"=>4, "parent_id"=>2, "title"=>"c4","content"=>"This is content 4");
$models[3] = array("id"=>5, "parent_id"=>3, "title"=>"c5","content"=>"This is content 5");
<div class="top-view-1">
<div class="child-2">
<div class="child-4">
<!-- And next <div>s Continues So on .... -->
</div>
</div>
<div class="child-3">
<div class="child-5">
<!-- And next <div>s Continues So on .... -->
</div>
</div>
</div>
Ho i dati e amp; Elenco di modelli figlio all'interno del livello del modello come indicato di seguito:
//Model Layer
public $Models = array(); // array of child models
public $data = array("id"=>1, "parent_id"=>null, "title"=>"C1","content"=>"This is a content");
Tuttavia, il problema si verifica nel livello vista in cui è necessario inviare i dati del modello in una funzione di visualizzazione ricorsiva che genera quella gerarchia di <div>s
//View Layer:
function ShowAsChild($nextChildModel)
{
echo '<div class="data".' .$nextChildModel->data["content"]';
$this->ShowChild($nextChildModel);
echo '</div>';
}
function ShowChild()
{
if (count($this->controller->model->childModels ) > 0)
{
echo '<div class="child">';
foreach ($this->controller->model->childModels as $child){
/* below code line is the key problem.
it should be like $child-->ShowAsChild();
*/
$this->ShowAsChild($child);
}
echo '</div>';
}
else
return;
}
Se osservi il codice sopra, allora noterai che la stessa vista si chiama da sola diversi dati del modello !. Di conseguenza, la ricorsione diventa infinita. Penso che sia necessario per trasferire dalla vista corrente alla vista successiva, che chiamerà le proprie funzioni con il proprio modello. Inoltre, queste funzioni non possono spostarsi sul livello del modello, perché creano direttamente la visualizzazione della vista HTML. Quindi, a questo punto, non so come risolvere questo problema.
Quindi per favore aiutatemi a risolvere questo problema. Si prega di mostrare alcuni esempi di codice. Grazie