Tema 4: Implementación de MVC en PHP
4.3 Implementación de MVC en PHP
4.3.1 Preparación del entorno
Para implementar el patrón MVC en PHP, debemos organizar el proyecto en varias carpetas y archivos. La estructura básica será:
/mi-aplicacion-mvc
│
├── /modelo
│ └── Empleado.php # Modelo: Interactúa con la base de datos
│
├── /vista
│ ├── empleados.php # Vista: Muestra la lista de empleados
│ ├── formulario.php # Vista: Formulario para agregar/editar empleados
│
├── /controlador
│ └── EmpleadoControlador.php # Controlador: Maneja la lógica de las solicitudes
│
├── index.php # Archivo principal que recibe las solicitudes
├── bd.php # Archivo con la función de conexión a la base de datos
└── /logs # Carpeta para los archivos de log (si es necesario)
Explicación de la estructura:
/modelo: Contiene clases que gestionan la interacción con la base de datos./vista: Contiene las vistas que muestran los datos al usuario./controlador: Gestiona las acciones del usuario, consulta el modelo y pasa los datos a la vista.index.php: El archivo principal que recibe las solicitudes y las pasa al controlador.bd.php: Contiene la función de conexión a la base de datos.
4.3.2 El Modelo en MVC (con PDO)
Empezamos creando el archivo bd.php que contendrá la función de conexión a la base de datos utilizando PDO. Este archico se incluirá en todos los scripts que necesiten conectarse a la base de datos.
Este fichero utilza las variables de entorno para obtener los datos de conexión a la base de datos. En nuesto caso están definidaas en el archivo docker-compose.yml de la siguiente manera:
Realizar las modificaciones necesarias para una conexión correcta a la base de datos.
Ejemplo de conexión a la base de datos: bd.php:
Ejemplo de conexión a la base de datos
Explicación:
DB_HOST_NAME: Nombre del host de la base de datos.DB_NAME: Nombre de la base de datos.DB_USER: Usuario de la base de datos.DB_PASSWORD: Contraseña de la base de datos.dbConnection: Clase que maneja la conexión a la base de datos.obtenerConexion(): Método estático que devuelve la conexión a la base de datos.cerrarConexion(): Método que cierra la conexión a la base de datos.
Modo de uso:
| Ejemplo de uso de la conexión a la base de datos | |
|---|---|
Ejemplo de Modelo: Empleado.php:
Ejemplo modelo empleado
Explicación:
obtenerEmpleados(): Obtiene empleados con paginación.- parámetro
$paginapara la paginación. - Se utiliza
LIMITyOFFSETpara controlar la cantidad de registros devueltos. - Se utiliza
bindValuepara evitar inyecciones SQL. - devolvemos un array asociativo con los resultados.
- parámetro
obtenerEmpleado($emp_id): Obtiene un empleado específico por su ID.- Parámetro
$emp_idpara identificar al empleado. - Se utiliza
bindValuepara evitar inyecciones SQL. - devolvemos un array asociativo con los resultados.
- Parámetro
crearEmpleado(): Inserta un nuevo empleado en la base de datos.- Parámetros para los datos del empleado.
- Se utiliza
bindValuepara evitar inyecciones SQL. - devolvemos
truesi la inserción fue exitosa.
actualizarEmpleado(): Actualiza un empleado existente.- Parámetros para el ID del empleado y los nuevos datos.
- Se utiliza
bindValuepara evitar inyecciones SQL. - devolvemos
truesi la actualización fue exitosa.
eliminarEmpleado(): Elimina un empleado de la base de datos.- Parámetro
$emp_idpara identificar al empleado. - Se utiliza
bindValuepara evitar inyecciones SQL. - devolvemos
truesi la eliminación fue exitosa.
- Parámetro
4.3.3 La Vista en MVC
La Vista es la que presenta los datos al usuario. Aquí creamos la vista empleados.php, que muestra la lista de empleados.
Ejemplo de Vista: empleados.php:
Ejemplo vista empleados
Explicación:
- Esta vista muestra la lista de empleados en una tabla.
- Los empleados se obtienen a través del Controlador y se pasan a la Vista.
- El enlace de editar y el botón de eliminar permiten que el usuario interactúe con la aplicación.
Formulario para la creación/edición de empleados:
Formulario empleados
Explicación:
-
Verificación de modo:
-
Si el parámetro
idestá presente en la URL, el formulario entra en modo de edición o modo de eliminación. Para poder distinguir entre edición y eliminación se ha añadido un parámetro más que es action que en el caso de eliminación tendrá el valodr delete. En ambos casos se cargan los datos del empleado en el formulario. -
Si no hay
id, se asume que el formulario está en modo de creación y se dejará vacío para que el usuario lo complete.
-
-
Pre-rellenado de campos:
- Los campos del formulario se pre-rellenan con los valores actuales del empleado si estamos editando. Si no, se dejan vacíos para la creación de un nuevo empleado.
-
Acción POST:
- Si el formulario se envía, se verifica el modo. Si es editar, se llama a la función de actualización. Si es crear, se llama a la función de creación. Y si no es ninguno de los anteriores, se llama a la función de eliminación.
-
Redirección:
- Después de guardar o actualizar el empleado, redirigimos al usuario a la página de empleados.php.
4.3.4 El Controlador en MVC
El Controlador gestiona las solicitudes de la Vista, interactúa con el Modelo y actualiza la Vista con los datos.
Ejemplo de Controlador: EmpleadoControlador.php:
Ejemplo controlador EmpleadoControlador
Explicación:
-
verEmpleados(): Obtiene la lista de empleados con paginación.- Parámetro
$paginapara la paginación. - Llama al método del Modelo para obtener los empleados.
- Devuelve la lista de empleados a la Vista.
- Parámetro
-
verEmpleado($emp_id): Muestra los detalles de un empleado específico.- Parámetro
$emp_idpara identificar al empleado. - Llama al método del Modelo para obtener un empleado por su ID.
- Devuelve los detalles del empleado a la Vista.
- Parámetro
-
agregarEmpleado(): Llama al Modelo para agregar un nuevo empleado.- Parámetros para los datos del nuevo empleado.
- Llama al método del Modelo para crear un nuevo empleado.
- Devuelve
truesi la inserción fue exitosa.
-
editarEmpleado(): Llama al Modelo para editar un empleado existente.- Parámetros para el ID del empleado y los nuevos datos.
- Llama al método del Modelo para actualizar un empleado.
- Devuelve
truesi la actualización fue exitosa.
eliminarEmpleado(): Llama al Modelo para eliminar un empleado.- Parámetro
$emp_idpara identificar al empleado. - Llama al método del Modelo para eliminar un empleado.
- Devuelve
truesi la eliminación fue exitosa.
- Parámetro
Resumen del punto 4.3:
- Modelo: Gestiona la interacción con la base de datos usando PDO y maneja la lógica de negocio.
- Vista: Presenta los datos al usuario y separa la lógica de presentación.
- Controlador: Gestiona las acciones del usuario, consulta el Modelo y actualiza la Vista.