Quote Originariamente inviata da Reiuky Visualizza il messaggio
Poi se non capisco neanche dopo aver studiato design pattern... Oh, posso sempre provare a fare la pizza. Magari mi riesce meglio.
Beh, se parti già così ti complichi la strada da solo...

Comunque, schematizzo e spero che si capisca

Design patter -> procedura testata e ritestata e ri testata da millemila persone che hanno verificato per certo che sia la procedura più semplice ed efficente per risolvere un problema.

FrontController è un design pattern
MVC è un design pattern

Per me è solo una "inutile complicazione" come ho scritto nel tread sulle discussioni off-topic.
essendo MVC e FC due design patterns questa frase che dici non può essere vera...


FrontController - viene utilizzato per ricevere gli input dell'utente e smistarli ai relativi moduli
MVC - serve a standardizzare la creazione dei moduli ed è strettamente legato al FC.


Il processo standard per gestire una richiesta dell'utente sarà:

a) utente richiede una risorsa
b) sistema riceve la richiesta e la passa al modulo designato (FC)
c) il controller effettua il controllo della richiesta (C)
d) se ci sono calcoli da effettuare o dati da recuperare dal db vengono fatti (M)
e) nel controller vengono composte le viste e "agganciate" alla vista principale (V)
f) sistema mostra l'intera vista

i punti c, d ed e vengono effettuati all'interno del controller.


In pratica:

l'utente richiede una risorsa, la risorsa si trova su: http://www.sito.it/index.php/modulo/azione/parametro
es. utente vuole vedere una pagina del sito: http://www.sito.it/index.php/pages/view/15

dove
http://www.sito.it - è l'host
index.php - è la pagina centralizzata per gestire le richieste (FC)
pages - è il modulo che gestisce le pagine all'interno del sito (formato da pagesController, pagesMapper, pagesModel e le viste)
view - è l'azione che l'utente ha richiesto
15 - identifica quale contenuto usare

tralasciamo la parte di frontController:
Codice PHP:
// controller
class pagesController {

  
// essendo il controller il punto di incontro di tutto il modulo deve ricevere
  // da un livello più alto (che è index.php) alcune classi per operare
  // di solito:
  // il database e la vista globale
  
public function __contructpdo $pdoview $view ) {
    
$this->view $view;

    
// nel costruttore carichiamo anche le classi utili per questo modulo
    // per interagire con il db ci serve il mapper
    // ed ecco che usiamo il db
    
$this->mapper = new pagesMapper$pdo );
  }

  
// vogliamo permettere all'utente di vedere alcune pagine del sito
  
public function view$id_pagina ) {
    
// prima cosa: il controller verifica i dati ricevuti, la faccio semplice
    // ma i controlli non sono mai abbastanza
    
if ( !empty( $id_pagina ) ) {
      
// i dati passati sono a posto, posso caricare i dati della pagina
      
$page $this->mapper->fetch$id_pagina );

      
// utilizzo i dati per popolare la vista della pagina
      
$pages = new view'pages' );
      
$pages->page $page;

      
// assegno un titolo alla pagina globale
      
$this->view->title 'Pagina di prova';
      
// attacco la vista specifica alla vista globale
      
$this->view->addView'content'$pages );
    }
  }


}


// il mapper serve per interagire con il db
class pagesMapper {

  private 
$pdo;
  private 
$table 'pages';

  
// un mapper ha sempre bisogno di un db per operare
  
public function __constructPDO $pdo ) {
    
$this->pdo $pdo;
  }

  public function 
fetch$id ) {
    
$query "SELECT * FROM $this->pages WHERE id = :id";

    
// la faccio semplice
    
return $this->pdo->execute$query, array( ':id'=>$id ) );
  }

adesso che abbiamo tutto possiamo far partire l'esempio:

index.php (il livello più alto di tutti )
Codice PHP:
// carico il database
$pdo = new PDO();
// carico la vista globale
$mainView = new view'template' );

// su questo livello devo gestire le richieste dell'utente ed indirizzarle nel modulo corretto
// mi serve il frontController per centralizzare tutto sulla index.php
$fc = new frontController();

// passo il db e la vista globale che serviranno per i moduli
$fc->run$pdo$mainView );

// il frontController ha richiamato il modulo che ha attivato l'azione che ha popolato
// la vista globale con i dati richiesti e alla fine li mostra all'utente
echo $mainView->render(); 
spero possa esserti d'aiuto, se hai dubbi sempre qui sto.