Diferencia entre revisiones de «PHP Conceptos básicos Modelo-Vista-Controlador»
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ó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>
- Seguir este exemplo.
- Outro exemplo.
-- Ángel D. Fernández González -- (2016).