Main Menu




browser lang:en

Users Area

Client Login

today cache size is:0

 

 


Commenti

RE:trasformare in .gz by boris
10/03/2011 by marco

22/02/2011 by bono
RE:trasformare in .gz
22/02/2011 by boris
trasformare in .gz
21/02/2011 by bono
RE:Ma a che serve sta roba???
05/02/2011 by dwarf79
Ma a che serve sta roba???
28/01/2011 by Luca
Rapidshare hotfile fileserver download
08/01/2011 by Rapidshare hotfile fileserver download
re:xml
03/12/2010 by david68

Leggi tutto »


RAPIDQ

Rapid-Q:The lost files
My old library where i have collected all the rapidq scripts and italian help


Today my pagerank is: Free Page Rank Tool
Upbooking - free booking engine

PHP e MVC - Un esempio di Model View Controller

Cosa è MVC?

Model View Controller è un modello di architettura software, che è ampiamente utilizzato in applicazioni Web, suddivise in tre strati (modello, vista e controller)

* Il Modello è responsabile di interagire con il database ed esegue regole di negoziazione.
* Il Controller processa le richieste della pagina web (la vista), e invia i dati al Modello, in modo tale che questi restituisca le informazioni appropriate per la visualizzazione in Vista.
* La Vista è il codice HTML che viene visualizzato per l'utente con informazioni da parte del controller.

Vantaggi di utilizzo.

Facilità di manutenzione del codice, in futuro, già che hanno il vantaggio di avere i diversi processi separati, a seconda della loro tipologia.
Se si desidera ad esempio cambiare il tipo di database, è necessario solo cambiare il codice di Modello.

Per una migliore comprensione delle architetture, mostro la trasformazione di un elenco di articoli di un blog.

Questo è il codice PROCEDURALE che elenca gli oggetti (ossia il codice che solitamente usiamo in PHP)




<?
// connessione alla base di dati
$cn = mysql_connect('localhost', 'utente', 'password');
mysql_select_db('db', $cn);

// consultiamo SQL per ottenere gli articoli
$risultato=mysql_query('SELECT data, titolo FROM articolo', $cn);
?>
<h1>Listato di articoli</h1>

<table>
     <tr> <th>Data</th> <th>Titolo</th> </tr>
<?php

// stampa il risultato
while ($riga = mysql_fetch_array($risultato, MYSQL_ASSOC))
{
    echo "<tr>";
    echo "<td> ".$riga['data']." </td>";
    echo "<td> ".$riga['titolo']." </td>";
    echo "</tr>";
}
?>

</table>

<?php
//chiudiamo la connessione
mysql_close($cn);
?>

Commenti

* Sulla stessa pagina ci si connette al server (funziona solo se MySQL) e selezioniamo un database.
* Realizziamo una richiesta (nessun errore di manipolazione e / o eccezioni).
* Disegnamo il codice HTML (combiniamo il codice HTML con i codici di PHP all'interno, lasciando i tag (<tr>, <td>) illeggibili per la persona che inserisce gli stili).

Dividere in due file

L'esempio di cui sopra, lo possiamo separare in due file, uno chiamato Controller e l'altro Vista.

Controller.php

<?
$cn = mysql_connect('localhost', 'utente', 'password');
mysql_select_db('db', $cn);

$risultato = mysql_query('SELECT data, titolo FROM articolo', $cn);
$articoli = array();

while($articolo = mysql_fetch_assoc($risultato))
{
    $articoli[] = $articolo;
}

mysql_close();

require('vista.php');
?>

Vista.php
<h1>Listato di Articoli</h1>
<table>
     <tr> <th>Data</th> <th>Titolo</th> </tr>

<?php foreach($articoli as $articolo): ?>
    <tr>
        <td><?php echo $articolo['Data']?></td>
        <td><?php echo $articolo['titolo']?></td>

    </tr>
<?php endforeach;?>
</table>

In questo modo abbiamo separato nel Controller.php la maggior parte del codice php con la logica di negozio, mentre in Vista.php inseriamo solo un array con i dati.
La cosa migliore sarebbe usare le istruzioni PHP più comuni in Vista, come if, endif, foreach, endforeach. E di non utilizzare le parentesi "{" che rimangono difficili da riconoscere all'inizio e alla fine.

Un altro grave problema è se vogliamo utilizzare di nuovo il listato in un'altra pagina, ci sarebbe di riscrivere il Controller.php.
Per questo suddivideremo il Controller che (controlador.php) in Modello.php e Controller.php.

Modello.php

<?php

function getArticoli()
{
    $cn = mysql_connect('localhost', 'utente', 'password');
    mysql_select_db('db', $cn);

    $risultato = mysql_query('SELECT data, titolo FROM articolo', $cn);
    $articoli = array();

    while($articolo = mysql_fetch_assoc($risultato))
    {
        $articoli[] = $articolo;
    }

    mysql_close();
}
?>


Controller.php
require('modello.php');

$articoli = getArticoli();

require('vista.php');


Dopo questa separazione il Controller sarebbe solo come un agente per trasmettere i dati dal Modello alla Vista, ma in applicazioni più complesse è il driver che esegue i compiti di autenticazione degli utenti, gestione delle sessioni, filtraggio e validazione dell'immissione dei dati da GET o POST.

Cosa succede se cambio gestore di database?

La risposta sarebbe cambiare tutte le caratteristiche del Modello (mysql_connect, mysql_query, ...), per il corrispondente caso, e che richiederebbe molto tempo.
Per fare un migliore uso delle MVC o per meglio dire cambiare un po il Modello, il Modello potrebbe essere separato in due strati:

* Il livello di accesso ai dati
* Il livello di astrazione del database

Se si desse il caso di cambiare di gestore di database dovremmo solo aggiornare il layer di astrazione del database

Esempio di due strati

Astrazione dei dati
function creareConnessione($server, $utente, $password)
{
  return mysql_connect($server, $utente, $password);
}

function chiudereConnessione($cn)
{
  mysql_close($cn);
}

function consulta($consulta, $base_dati, $cn)
{
  mysql_select_db($base_dati, $cn);

  return mysql_query($consulta, $cn);
}

function getRisultato($risultato, $tipo = MYSQL_ASSOC)
{
  return mysql_fetch_array($risultato, $tipo);
}


Accesso ai dati

function getTuttiGliArticoli()
{
  $cn = creareConnessione('localhost', 'utente', 'password');

  $risultato=consulta('SELECT data, titolo FROM articolo', 'db', $cn);

  $articoli = array();
  while ($articolo = getRisultato($risultato))
  {
     $articoli[] = $articolo;
  }

  chiudereConnessione($cn);

  return $articoli;
}



Abbiamo ora il livello di accesso ai dati senza alcuna dipendenza di funzioni di gestione di database, e saremo in grado di riutilizzare le funzioni nel database abstraction layer di accesso ai dati in altre caratteristiche del nostro Modello.


Commenti

zend by holy

16/03/2010 
ya ya, este es solo para empezar :-)


Zend Framework by Andreu

16/03/2010 
Para implementar el sistema "mvc" te puedes mirar el framework de zend, esta muy muy bien.


corretto articolo MVC by admin

31/08/2009 
Grazie per i commenti, ho corretto l'articolo.

Un saluto a tutti


Davvero niente male Holy complimenti by GreyWolf

31/08/2009 
Complimenti la tua guida offre un chiarimento su questo concetto che è davvero ancora poco diffuso anche all'interno di moltte web agency. Come anche tu hai anticipato non è che sia obbligatorio utilizzare l'MVC ma sicuramente rende il codice molto più pulito.

Faresti cosa davvero molto gradita se puoi sistemare il controller e il modello così che non siano più inveriti e magari se ti è possibiile fare una guida che si riaggancia a questa e magari approfondisce un po di più. Grazie davvero ottimo lavoro e gran bel sito!


re:controller.php e modello.php by holy

07/07/2009 
di niente, tieni in conto che questa è una visione molto semplicistica.
Spulciando nella rete puoi trovare esempi che approfondiscono ed integrano il concetto di routing in php.


controller.php e modello.php by lorenza

07/07/2009 
Ok, era solo un mio scrupolo per sapere se avevo realmente capito l'MVC. (E' la prima volta che mi cimento con questo framework!)
Ottimo tutorial grazie! :)


effettivamente by holy

07/07/2009 
effettivamente si, è un errore che non ho mai corretto


controller.php e modello.php by lore

06/07/2009 
Ciao,
ma il listato inerente alla suddivisione tra controller.php e modello.php sono invertite?
Grazie mille


Inserisci un commento

Titolo
Messaggio
Nome Utente
e-mail (se vuoi ricevere le risposte a questo post anche via mail)

Users

Videos


Scripts & Tutorials

Linux - I comandi principali

07/11/2010 

Per i piú smemorati, una lista di comandi principali usati con linux cd : cambia la directory corrente. ls : mostra il…

in:Scripts e tutorials (0 commenti)

Search Engine Optimization - 130 parametri usati da google per valutare il tuo sito

26/08/2010 

Con l'avvento di caffeine molti webmaster si sono trovati a dover rivedere tutte le strategie SEO per i…

in:Scripts e tutorials (0 commenti)

Inserisci Google BUZZ nel tuo sito con Google Buzz Widget Jquery Plugin

15/02/2010 

Questo è un widget di jQuery per il nuovo social network di Google-Buzz-che è possibile incorporare ovunque per…

in:Scripts e tutorials (0 commenti)

Javascript - Codifica/decodifica di password nei file ste di Dreamweaver

17/01/2010 

Questo é un pratico codificatore/decodificatore/decriptatore (chiamatelo come volete) di password inserite nei file di configurazione .ste su dreamweaver function…

in:Scripts e tutorials (0 commenti)

PHP - Uno script per calcolare il PageRank di Google

10/01/2010 

Il PageRank è un algoritmo che usa Google per valutare la credibilità e l'autorevolezza delle pagine Web. Il…

in:Scripts e tutorials (8 commenti)

PHP - Download file con limite di velocita'

20/10/2009 

Con questo script possiamo limitare il download di un file dal nostro server php; il limite di velocitá…

in:Scripts e tutorials (0 commenti)

PHP - Salvare immagini remote sul proprio server usando CURL

12/10/2009 

Alcuni host hanno disabilitati nei settaggi del.ini i comandi allow_url_fopen. Questo significa anche non poter usare i vantaggi…

in:Scripts e tutorials (2 commenti)

PHP - Short Url: due funzioni per creare link brevi

06/10/2009 

Gli SHORT URLS fanno ormai parte di quelle cose di internet che ci suonono terribilmente familiari; per capirci…

in:Scripts e tutorials (0 commenti)

Leggi tutto »


Tag Clouds


Linux comandi principaliSearch Engine Optimization parametri usati google valutare sitoInserisci Google BUZZ sito Google Buzz Widget Jquery PluginJavascript Codificadecodifica password file DreamweaverPHP script calcolare PageRank GooglePHP Download file limite velocitaPHP


Add to Technorati Favorites