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.

  • ๐Ÿงฉ Patrรณn: El patrรณn MVC divide una aplicaciรณn en Modelo (datos), Vista (presentaciรณn) y Controlador (gestiรณn de solicitudes) para obtener un cรณdigo mรกs limpio.
  • ๐Ÿš€ Productividad: Los frameworks incluyen bibliotecas preconfiguradas para el acceso a bases de datos, la validaciรณn y el saneamiento de entradas, lo que permite a los equipos desarrollar funcionalidades mรกs rรกpidamente.
  • ๐Ÿ› ๏ธ Opciones: CodeIgniter, CakePHP y Laminas (anteriormente Zend) siguen siendo opciones activas, mientras que Kohana se dejรณ de utilizar en 2017.
  • ๐Ÿ—„๏ธ Modelo: In CodeIgniter y sus modelos extienden CI_Model y utilizan los mรฉtodos de Query Builder para realizar operaciones seguras con la base de datos.
  • ๐ŸŽฎ Controlador: Los controladores extienden CI_Controller, leen la entrada del usuario a travรฉs de la clase input y cargan la vista correcta.
  • ๐Ÿ“ˆ Repercusiones: La adaptaciรณn de una aplicaciรณn de sondeo PHP simple muestra cรณmo la estructura MVC reduce la duplicaciรณn y simplifica el mantenimiento a largo plazo.

Framework MVC de PHP

ยฟ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

CodeEncendedor


CodeEncendedor


https://codeigniter.com/

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:


como un lugar


como un lugar


http://kohanaframework.org

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:


CakePHP


CakePHP


www.cakephp.org

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;


Zend

https://getlaminas.org/


Zend (ahora Laminas)

Es un marco poderoso que es;

  • Seguro, confiable, rรกpido y escalable
  • Permite la creaciรณn de servicios web y API.

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:

  • Pimcore CMS,
  • PuntoKernel.

Entre las empresas que han utilizado el marco de trabajo Zend se incluyen:

  • BBC
  • Cisco
  • Webex
  • Ofertas.com

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/

CodeLa pรกgina de bienvenida de Igniter se muestra despuรฉs de extracestableciendo el marco

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

Configuraciรณn de la base de datos en CodeArchivo base de datos Igniter.php

  • 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/

Formulario de votaciรณn de encuesta de opiniรณn presentado por el CodeAplicaciรณn Igniter

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.

Se muestra un mensaje de alerta de validaciรณn cuando no se selecciona ningรบn voto.

Vota por tu biblioteca favorita y luego haz clic en Aceptar. Verรกs la siguiente pรกgina de resultados.

Pรกgina de resultados de encuestas de opiniรณn que muestra el recuento de votos por JavaBiblioteca de scripts

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.

Preguntas Frecuentes

HMVC (Modelo Vista Controlador Jerรกrquico) organiza una aplicaciรณn en trรญadas MVC independientes que pueden llamarse entre sรญ. Frameworks como como un lugar HMVC se popularizรณ porque ayuda a modularizar aplicaciones de gran tamaรฑo.

Sรญ. Laravel Actualmente es el framework MVC de PHP mรกs popular. Sigue la misma separaciรณn Modelo-Vista-Controlador descrita aquรญ, aรฑadiendo herramientas como Eloquent ORM y las plantillas Blade.

Sรญ. Herramientas como Copiloto de GitHub Se pueden generar modelos, controladores y vistas a partir de las indicaciones. Aun asรญ, conviene revisar el cรณdigo generado para detectar problemas de seguridad, como la salida sin escape y la inyecciรณn SQL.

No. Si bien los asistentes de IA agilizan la escritura de cรณdigo, los frameworks siguen proporcionando la estructura probada, la configuraciรณn de seguridad predeterminada y las convenciones que facilitan el mantenimiento de las aplicaciones. La mejor combinaciรณn de ambos es fundamental.

No. CodeEncendedor Es apto para desarrolladores con poca experiencia en programaciรณn orientada a objetos. Basta con conocer las clases, los mรฉtodos y la herencia bรกsica para seguir sus patrones de modelo y controlador.

Resumir este post con: