Diferencia entre revisiones de «PHP Conceptos básicos Modelo-Vista-Controlador»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 1: Línea 1:
 +
== Introdución ==
 +
 +
* Có que levamos visto ata o de agora xa podemos facer sitios webs en PHP, pero teremos certos problemas 'de mantemento' en caso de que o sitio sexa grande (con grande me refiro a unha cantidade alta de páxinas PHP).
 +
 +
* Isto é debido a que estamos a 'mesturar' aspectos, como por exemplo as funcións de acceso a datos (conexión e operacións) dentro das páxinas que van 'presentar' ao usuario a información.
 +
 +
 +
* Imaxinemos como estamos a facer agora que queremos cambiar o acceso á base de datos e no canto de utilizar Mysql queremos usar SQLServer...
 +
: Teríamos que ir a todas as páxinas cambiando as funcións de acceso a datos.
 +
 +
* Por outra banda, imaxinade que temos un equipo de persoas e queremos 'distribuír' o traballo en equipos.
 +
: De tal forma que un equipo se encargue de 'maquetar' a información con CSS e HTML e outro que se adique a facer as chamadas á base de datos en busca de dita información.
 +
: Esta labor non a poderíamos facer en 'paralelo' xa que a presentación de datos e o acceso aos mesmos se fan dentro da mesma páxina.
 +
 +
 +
 +
== Melloras ao feito ata o de agora ==
 +
 +
* En primeiro lugar, poderíamos crear unha clase que se encargue da facer a conexión á base de datos e as operacións contra a mesma.
 +
 +
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
 +
<?php
 +
class Database {
 +
 +
const SERVIDOR = 'localhost';
 +
const USUARIO = 'user_php';
 +
const PASSWORD = 'user_php';
 +
const BD = 'PHP';
 +
 +
    private static $db;
 +
    private $conexion;
 +
 +
    private function __construct() {
 +
        $this->conexion = new mysqli(SERVIDOR,USUARIO,PASSWORD,BD);
 +
        $this->conexion->set_charset('utf8'); 
 +
    }
 +
 +
    function __destruct() {
 +
        $this->conexion->close();
 +
    }
 +
 +
    public static function getConnection() {
 +
        if (self::$db == null) {
 +
            self::$db = new Database();
 +
        }
 +
        return self::$db->conexion;
 +
    }
 +
 +
    public static function consultaDB($consulta) {
 +
          $result=self::$db->$conexion->query($consulta);
 +
    }
 +
 +
}
 +
 +
</syntaxhighlight>
 +
 +
 +
 +
            <?php
 +
            include ('Database.php');
 +
           
 +
            $conex = Database::getConnection();
 +
            if ($conex->connect_error){
 +
                die('Erro de Conexi&oacute;n (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
 +
            }
 +
            ?>
 +
           
 +
           
 +
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 +
                "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 +
            <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
 +
                <head>
 +
                    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 +
                    <title>Operacións BD</title>
 +
                </head>
 +
           
 +
                <body>
 +
            <?php       
 +
                 
 +
                    $result=Database::consultaDB(Database::CONSULTAR_LIBROS);
 +
                    if ($result && $result->num_rows>0){
 +
                        echo "<table border='1'>";
 +
                        while($row = $result->fetch_assoc()) {
 +
                            echo '<tr>';
 +
                            printf("<td>%s</td>",$row["titulo"]);
 +
                            echo '</tr>';
 +
                        }
 +
                        echo '</table>';
 +
                        $result->free();  // Liberamos da memoria os recursos
 +
                    }
 +
                    else {
 +
                        echo "Non hai datos que amosar!!!!";
 +
                    }
 +
                    $conex->close();  // Pechamos a conexión
 +
                 
 +
            ?>       
 +
                </body>   
 +
            </html>
 +
 +
 +
  
 
* [https://es.wikipedia.org/wiki/Modelo%E2%80%93vista%E2%80%93controlador Concepto MVC].
 
* [https://es.wikipedia.org/wiki/Modelo%E2%80%93vista%E2%80%93controlador Concepto MVC].

Revisión del 19:13 13 feb 2017

Introdución

  • Có que levamos visto ata o de agora xa podemos facer sitios webs en PHP, pero teremos certos problemas 'de mantemento' en caso de que o sitio sexa grande (con grande me refiro a unha cantidade alta de páxinas PHP).
  • Isto é debido a que estamos a 'mesturar' aspectos, como por exemplo as funcións de acceso a datos (conexión e operacións) dentro das páxinas que van 'presentar' ao usuario a información.


  • Imaxinemos como estamos a facer agora que queremos cambiar o acceso á base de datos e no canto de utilizar Mysql queremos usar SQLServer...
Teríamos que ir a todas as páxinas cambiando as funcións de acceso a datos.
  • Por outra banda, imaxinade que temos un equipo de persoas e queremos 'distribuír' o traballo en equipos.
De tal forma que un equipo se encargue de 'maquetar' a información con CSS e HTML e outro que se adique a facer as chamadas á base de datos en busca de dita información.
Esta labor non a poderíamos facer en 'paralelo' xa que a presentación de datos e o acceso aos mesmos se fan dentro da mesma páxina.


Melloras ao feito ata o de agora

  • En primeiro lugar, poderíamos crear unha clase que se encargue da facer a conexión á base de datos e as operacións contra a mesma.
 1 <?php
 2 class Database {
 3 
 4 const SERVIDOR = 'localhost';
 5 const USUARIO = 'user_php';
 6 const PASSWORD = 'user_php';
 7 const BD = 'PHP';
 8 
 9     private static $db;
10     private $conexion;
11 
12     private function __construct() {
13         $this->conexion = new mysqli(SERVIDOR,USUARIO,PASSWORD,BD);
14         $this->conexion->set_charset('utf8');  
15     }
16 
17     function __destruct() {
18         $this->conexion->close();
19     }
20 
21     public static function getConnection() {
22         if (self::$db == null) {
23             self::$db = new Database();
24         }
25         return self::$db->conexion;
26     }
27 
28     public static function consultaDB($consulta) {
29           $result=self::$db->$conexion->query($consulta);
30     }
31 
32 }


           <?php
           include ('Database.php');
           
           $conex = Database::getConnection();
           if ($conex->connect_error){
                die('Erro de Conexión (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
           }
           ?>
            
            
           <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
           <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
               <head>
                   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
                   <title>Operacións BD</title>
               </head>
            
               <body>
           <?php        
                  
                   $result=Database::consultaDB(Database::CONSULTAR_LIBROS);
                   if ($result && $result->num_rows>0){

echo "

"; while($row = $result->fetch_assoc()) { echo ''; printf("",$row["titulo"]); echo ''; } echo '
%s

';

                       $result->free();  // Liberamos da memoria os recursos
                   }
                   else {
                       echo "Non hai datos que amosar!!!!";
                   }
                   $conex->close();  // Pechamos a conexión
                  
           ?>        
               </body>    
           </html>







-- Ángel D. Fernández González -- (2016).