Introducción a los Frameworks MVC
eugeniaperez.es
Aplicación web PHPacacic
Aplicación web PHP con mejorasacacic
Aplicación web Symfonyacacic
A la hora de comenzar a desarrollar una aplicación,
es recomendable apoyarse en un Framework.
eugeniaperez.es
Funcionalidades ya hechas...
Son utilizados en la empresa
eugeniaperez.es
eugeniaperez.es
Algunos de los más conocidos son Zend, Symfony, Yii o CodeIgniter
eugeniaperez.es
¿Infojos...?
eugeniaperez.es
spaguetti
code
eugeniaperez.es
eugeniaperez.es
Pasamos de la versión inicial -> RolePlayingGameInit
A una versión poco estructurada -> RolePlayingSinMVC
A una versión con separación de capas -> RolePlayingGame
eugeniaperez.es
POPO -> Creature
insertController
updateController
deleteController
/conf -> PersistentManager
/DAO -> CreatureDAO
Persistence
assets
eugeniaperez.es
Con esta versión conseguimos:
- Centralizar los accesos a BD -> una clase configurable Persistent Manager
- Acceso a datos mediante el patrón DAO
- Separación de vistas, controladores y modelo
- Creación del objeto Creature en el modelo
- Uso de Prepared Statements
- Introduciremos validaciones
eugeniaperez.es
eugeniaperez.es
eugeniaperez.es
eugeniaperez.es
eugeniaperez.es
Views
eugeniaperez.es
Descarga los proyectos almacenados en Proyectos Fw PHP.zip:
eugeniaperez.es
Aplicación muy sencilla que sigue la estructura anterior.
El programa simula una sencilla operación de login.
eugeniaperez.es
La estructura del proyecto.
eugeniaperez.es
Lo primero es crear una carpeta que se llame \persistence, y dentro crearemos otras dos carpetas, una \conf y otra \DAO.
A la clase PersistentManager.php se le aplica el patrón Singleton.
También se crea el UserDAO, y el objeto User.
Finalmente se crean las vistas.
eugeniaperez.es
Revisando la estructura de desarrollo a seguir y el diseño de componentes.
Se abordan las directrices de codificación de la arquitectura de referencia creada.
eugeniaperez.es
Version 0.2
Version 0.1
eugeniaperez.es
Version 0.4
Version 0.3
eugeniaperez.es
Version 0.6
Version 0.5
eugeniaperez.es
El proyecto debe nombrarse con ProofOfConcept.
Si no contiene la BD, la puedes descargar del aula.
Necesitarás variar la contraseña.
¡Probando su funcionamiento...!
eugeniaperez.es
Analicemos la operación de inserción de una tarea.
eugeniaperez.es
Analicemos la operación de inserción de una tarea.
Interfaz usuario:
http://localhost/ProofOfConcept/app/private/views/index.php
Formulario de inserción con Bootstrap
eugeniaperez.es
<form class="form-horizontal"
id="newTaskForm" role="form" action="../../controllers/tasksController.php?actiontask" method="POST">
Datos del form viajan...
eugeniaperez.es
Manejando la acción en el controlador
El flujo de ejecución se dirige al tasksController.php:
if (isset($_GET["actiontask"])) {
$_taskController = new TaskController();
switch ($_POST["btnsubmit"]) {
case "Create":
$_taskController->add();
break;
case "Edit":
//$_taskController->edit();
break;
}
}
eugeniaperez.es
El flujo de ejecución al método add():
public function add() {
$_task = new Task();
$_task->setTitle($_POST["title"]);
$_task->setDescription($_POST["description"]);
$_task->setDate($_POST["date"]);
$_task->setTime($_POST["time"]);
$_task->setUserid($this->getUseridSession());
$this->_taskDAO->insert($_task);
HTTPUtils::redirect("../private/views/index.php");
}
Se recogen los datos
que vienen por POST
Se llama al DAO
para la persistencia
Se redirige a la vista inicial
eugeniaperez.es
Se sigue el patrón AbstractFactory, que consiste en una factoría de DAOS que se encargará de inicializarlos:
public function __construct() {
$this->_factory= DAOFactory::getFactory();
}
eugeniaperez.es
El TaskController llama al insert de TaskDAO pasándole como parámetro un objeto Task: Plain Old PHP Object (POPO)
class Task{
private $_taskid;
private $_userid;
private $_date;
private $_time;
private $_title;
private $_description;
private $_done;
//Getters and setters
´´´
}
eugeniaperez.es
La clase TaskDAO en persistence/daos, y el método insert().
Se permite lanzar prepared statements contra la BD para generar consultas SQLde manera segura -> se evita SQL Injection.
eugeniaperez.es
Vuelta a la vista:
Además del formulario de creación de tareas, se tiene una tabla con el listado de las mismas.
Al recargar aparecerá la nueva tarea.
HTTPUtils::redirect("../private/views/index.php");
eugeniaperez.es
Version 0.9
Version 0.8
Version 0.7
eugeniaperez.es
Version 1.2
Version 1.1
Version 1.0
eugeniaperez.es
Version 1.5
Version 1.4
Version 1.3
eugeniaperez.es
Version 1.7
Version 1.6
eugeniaperez.es
Probando su funcionamiento...
eugeniaperez.es
Leer enunciado de la práctica del Blog...
...con esta arquitectura
DW_practicaBlog.pdf