Tutorial del marco PHP MVC
โก Resumen inteligente
El diseรฑo del framework PHP MVC separa los datos de la aplicaciรณn y la lรณgica de negocio de la presentaciรณn, utilizando modelos, vistas y controladores. CodeIgniter hace que este patrรณn sea prรกctico, permitiendo a los desarrolladores de PHP crear aplicaciones web seguras y fรกciles de mantener con mayor rapidez.

ยฟQuรฉ es el marco PHP MVC?
PHP MVC es un patrรณn de diseรฑo de aplicaciones que separa los datos de la aplicaciรณn y la lรณgica empresarial (modelo) de la presentaciรณn (vista). MVC significa Modelo, Vista y Controlador.
El controlador media entre los modelos y las vistas.
Piense en el patrรณn de diseรฑo MVC como un automรณvil y un conductor.
El coche tiene parabrisas (vista) que el conductor (controlador) utiliza para controlar el trรกfico que tiene delante, y luego acelerar o frenar (modelo) dependiendo de lo que ve delante.
A continuaciรณn, veamos por quรฉ merece la pena utilizar un framework basado en este patrรณn.
ยฟPor quรฉ utilizar el marco PHP MVC?
Los frameworks MVC de PHP simplifican el trabajo con tecnologรญas complejas mediante:
- Ocultar todos los detalles complejos de implementaciรณn
- Proporcionar mรฉtodos estรกndar que podamos utilizar para construir nuestras aplicaciones.
- Aumenta la productividad de los desarrolladores, ya que las implementaciones bรกsicas de actividades como la conexiรณn a la base de datos y la sanitizaciรณn de la entrada del usuario ya estรกn parcialmente implementadas.
- Fomentar el cumplimiento de los estรกndares de codificaciรณn profesionales.
Patrรณn de diseรฑo PHP MVC
Analicemos ahora brevemente cada componente del patrรณn de diseรฑo MVC.
Modelo โ esta parte se ocupa de la lรณgica empresarial y los datos de la aplicaciรณn. Se puede utilizar para realizar validaciones de datos, procesar datos y almacenarlos. Los datos pueden provenir de;
- archivo plano
- base de datos de CRISPR Medicine News
- Documento XML
- Otras fuentes de datos vรกlidas.
Control โ Esta es la parte que se encarga de las solicitudes de recursos del usuario al servidor.
Como ejemplo, cuando el usuario solicita el URL โฆ/index.php?products=listaEl controlador cargarรก el modelo de productos para recuperar los datos de los productos y luego mostrarรก los resultados en la vista de lista.
En pocas palabras, el controlador vincula los modelos y las vistas segรบn los recursos solicitados.
Vistas โ Esta parte se encarga de presentar los datos al usuario. Normalmente, esto se hace en forma de pรกginas HTML.
Tipos de marco PHP MVC
Seleccionar el mejor marco PHP es un desafรญo.
No es necesario que escriba su propio marco para beneficiarse de las ventajas de MVC.
Sรณlo debe intentar crear su propio diseรฑo de aplicaciรณn relacionado con MVC para comprender cรณmo funcionan los marcos MVC.
Una vez que se sienta cรณmodo con la forma en que funcionan los marcos MVC, debe pasar a los marcos maduros y ya probados.
La siguiente tabla describe brevemente algunos de los frameworks PHP mรกs populares y las caracterรญsticas que ofrece cada uno.
| Marco conceptual | Mareas Ideales para Lecciones |
|---|---|
|
|
Es uno de los frameworks MVC de PHP mรกs populares, ahora en su cuarta versiรณn principal (CodeIgniter 4). Es ligero y tiene una curva de aprendizaje corta. Cuenta con un amplio conjunto de bibliotecas que ayudan a crear sitios web y aplicaciones rรกpidamente. Los usuarios con conocimientos limitados de programaciรณn orientada a objetos tambiรฉn pueden usarlo. Aplicaciones creadas con CodeEl encendedor incluye:
|
|
Se trata de un framework seguro y ligero basado en el modelo jerรกrquico de vista y controlador (HMVC). Nota: Kohana se descontinuรณ oficialmente en 2017; su รบltima versiรณn estable fue la 3.3.6 (julio de 2016). La bifurcaciรณn de la comunidad, Koseven, continuรณ con su cรณdigo fuente. Entre las empresas que utilizaron Kohana se incluyen: |
|
Estรก basado en Ruby on Rails y se mantiene activo (versiรณn 5.x). Es conocido por conceptos como patrones de diseรฑo de software, convenciรณn sobre configuraciรณn, ActiveRecord, etc. CakePHP las aplicaciones potenciadas incluyen; |
|
|
Es un marco poderoso que es;
Es ideal para el desarrolloping aplicaciones empresariales. En 2020, Zend Framework hizo la transiciรณn al proyecto de cรณdigo abierto Laminas. Las aplicaciones basadas en Zend/Laminas incluyen:
Entre las empresas que han utilizado el marco de trabajo Zend se incluyen:
|
PHP MVC Framework vs. PHP puro: Diferencias clave
ยฟQuรฉ cambia realmente un framework en la prรกctica? PHP puro ofrece total libertad, pero cada proyecto termina reinventando el enrutamiento, la validaciรณn y el acceso a la base de datos desde cero. Un framework MVC de PHP estandariza estas tareas repetitivas, de modo que el cรณdigo se mantiene coherente entre proyectos y equipos.
| Aspecto | PHP simple | Framework MVC de PHP |
|---|---|---|
| Code organizaciรณn | HTML, SQL y lรณgica combinados en archivos individuales | Separados en modelos, vistas y controladores. |
| Acceso a la base de datos | Consultas escritas a mano en cada pรกgina. | Generador de consultas integrado u ORM con enlace de parรกmetros |
| Seguridad | El desarrollador debe recordar todas las medidas de seguridad. | Incluye filtrado de entrada, protecciรณn XSS y CSRF. |
| Mantenimiento | Los cambios se propagan de forma impredecible a travรฉs de los archivos. | Cada capa puede cambiar de forma independiente. |
๐ Tip: Primero, crea un pequeรฑo proyecto sencillo en PHP, como la encuesta de opiniรณn que aparece a continuaciรณn; las dificultades de trabajar con cรณdigo mixto hacen evidente el valor de la separaciรณn MVC.
Portar la aplicaciรณn de encuestas de opiniรณn a CodeEncendedor
En esta tutoriales, creamos una aplicaciรณn de encuestas en PHP. Aquรญ, portaremos ese cรณdigo a CodeEncendedor
- Descargar la รบltima versiรณn de CodeEncendedor de su sitio web.
- ExtracCopie el contenido del archivo comprimido a su directorio de desarrollo en el directorio de su servidor web. Usaremos ciopinionpoll como nombre de carpeta en esta lecciรณn.
- Navega hasta el URL http://localhost/ciopinionpoll/
El CodeLa pรกgina de bienvenida de Igniter que se muestra arriba confirma que el framework estรก instalado correctamente. Ahora vamos a portar nuestra aplicaciรณn de encuestas de opiniรณn a CodeIgniter. Recordemos que nuestra aplicaciรณn se dividiรณ en tres componentes principales, a saber:
- Controlador frontal: esta es la parte que responde a URL Realiza la solicitud y devuelve la pรกgina solicitada. Este cรณdigo irรก en el controlador.
- Modelo: este es el cรณdigo que responde a las solicitudes de datos y devuelve los datos solicitados. Este cรณdigo se incluirรก en el modelo.
- Vistas: este es el cรณdigo responsable de formatear y mostrar los datos. Este cรณdigo entrarรก en la vista.
Ajustes de configuraciรณn de la base de datos
Para configurar la conexiรณn a la base de datos:
- Navegar a la carpeta ciopinionpoll
- Abra el panel de database.php archivo ubicado en el directorio application/config.
- Localice las siguientes lรญneas de cรณdigo
- Establecer el nombre de usuario como root
- Establezca la contraseรฑa como la contraseรฑa de root de su localhost.
- Establezca el nombre de la base de datos como opinion_poll. Tenga en cuenta que utilizaremos la base de datos creada en la lecciรณn anterior.
- Guarde los cambios y cierre el archivo.
Creando nuestro modelo
A continuaciรณn vamos a crear nuestro modelo que extenderรก el CI_Model. El CI_Model forma parte del CodeBibliotecas de Igniter. El modelo se ubicarรก en application/models. opinion_poll_model.php
<?php
class Opinion_poll_model extends CI_Model
{
public function __construct()
{
parent::__construct();
$this->load->database();
}
public function total_votes()
{
$query = $this->db->select('COUNT(choice) as choices_count')->get('js_libraries');
return $query->row()->choices_count;
}
public function get_results()
{
$libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow");
$table_rows = '';
for ($i = 1; $i < 5; $i++)
{
$query = $this->db->select('COUNT(choice) as choices_count')
->where('choice', $i)
->get('js_libraries');
$table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $query->row()->choices_count . "</b> votes</td></tr>";
}
return $table_rows;
}
public function add_vote($choice)
{
$ts = date("Y-m-d H:i:s");
$data = array('choice' => $choice, 'ts' => $ts);
$this->db->insert('js_libraries', $data);
}
}
?>
AQUร,
- โclase Opinion_poll_model extiende CI_Modelโฆโ es nuestro modelo que extiende CI_Model
- โparent::__construct();โ llama al constructor de CI_Model.
- โ$esto->cargar->base de datos();โ carga la biblioteca de la base de datos para que nuestra aplicaciรณn pueda interactuar con la base de datos
- โ$this->db->โ es CodeRegistro activo de Igniter. Compruรฉbelo. este enlace para obtener mรกs informaciรณn sobre el registro activo.
Creando nuestro controlador
Ahora vamos a crear el controlador. Usaremos el predeterminado. CodeControlador Igniter ubicado en application/controllers/welcome.php. Reemplace su cรณdigo fuente con el siguiente cรณdigo.
<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('opinion_poll_model');
}
public function index() {
if ($this->input->post('submitbutton') && !$this->input->post('vote')) {
echo "<script>alert('You did not vote!');</script>";
}
if ($this->input->post('vote')) {
$this->opinion_poll_model->add_vote($this->input->post('vote'));
$data['total_votes'] = $this->opinion_poll_model->total_votes();
$data['rows'] = $this->opinion_poll_model->get_results();
$this->load->view('results', $data);
} else {
$this->load->view('opinion_poll_form');
}
}
}
/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */
?>
AQUร,
- "if (! definido ('BASEPATH')) salir ('No se permite acceso directo al script');" garantiza que los usuarios no accedan directamente a la clase de controlador
- โclase Bienvenido extiende CI_Controllerโฆโ nuestro controlador extiende la clase CI_Controller
- La funciรณn pรบblica __construct() llama al mรฉtodo constructor de la clase CI_Controller y carga nuestro modelo Opinion_poll_model.
- โpublic function index()โฆโ es la funciรณn que se asigna a index.php. Utiliza CodeLa clase de entrada de Igniter verifica si se ha emitido un voto, lo agrega a la base de datos y luego muestra los resultados. Si el array `post` de la clase de entrada estรก vacรญo, carga la pรกgina de votaciรณn.
- โ$this->input->post('โฆ')โ es el CodeClase de entrada de Igniter que obtiene el contenido de la variable global $_POST.
- "$this->opinion_poll_model->add_vote($this->input->post('vote'))" llama al mรฉtodo add_vote del modelo para agregar el voto a la base de datos.
Creando nuestras vistas
Recordemos del ejemplo anterior que tenรญamos dos pรกginas HTML, una para votar y otra para los resultados. Usaremos el mismo cรณdigo HTML con mรญnimas modificaciones para crear nuestras vistas. Crea los siguientes archivos en el directorio application/views.
opinion_poll_form.php
<html>
<head>
<title>
JavaScript Libraries - Opinion Poll
</title>
</head>
<body>
<h2>JavaScript Libraries - Opinion Poll</h2>
<p><b>What is your favorite JavaScript Library?</b></p>
<form method="POST" action="index.php">
<p>
<input type="radio" name="vote" value="1" /> JQuery
<br />
<input type="radio" name="vote" value="2" /> MooTools
<br />
<input type="radio" name="vote" value="3" /> YUI Library
<br />
<input type="radio" name="vote" value="4" /> Glow </p>
<p>
<input type="submit" name="submitbutton" value="OK" />
</p>
</form>
</body>
</html>
Ahora creemos la pรกgina de resultados results.php
<html>
<head>
<title>JavaScript Libraries - Opinion Poll Results</title>
</head>
<body>
<h2>JavaScript Libraries - Opinion Poll Results</h2>
<p><b>What is your favorite JavaScript Library?</b></p>
<p><b><?php echo $total_votes; ?></b> people have thus far taken part in this poll:</p>
<p><table><tr><td>
<?php print($rows); ?>
</tr></td></table></p>
<p><a href="#">Return to voting page</a></p>
</body>
</html>
Probar nuestra aplicaciรณn
Suponiendo que el directorio raรญz de su aplicaciรณn sea ciopinionpoll, navegue hasta http://localhost/ciopinionpoll/
La pรกgina de votaciรณn que aparece arriba proviene de nuestra vista opinion_poll_form. Haga clic en Aceptar sin seleccionar ninguna opciรณn y verรก el siguiente mensaje de alerta.
Vota por tu biblioteca favorita y luego haz clic en Aceptar. Verรกs la siguiente pรกgina de resultados.
Esto confirma que las tres capas funcionan conjuntamente: el controlador recibiรณ el voto, el modelo lo almacenรณ y lo contabilizรณ, y la vista mostrรณ los totales.








