{"id":5343,"date":"2026-01-19T17:03:48","date_gmt":"2026-01-19T16:03:48","guid":{"rendered":"https:\/\/sutilweb.eu\/?page_id=5343"},"modified":"2026-01-19T17:03:48","modified_gmt":"2026-01-19T16:03:48","slug":"47-que-es-el-patron-mvc-aprender-a-crear-nuestro-propio-framework-php","status":"publish","type":"page","link":"https:\/\/sutilweb.eu\/index.php\/lenguajes\/php\/php-practico\/47-que-es-el-patron-mvc-aprender-a-crear-nuestro-propio-framework-php\/","title":{"rendered":"47. Qu\u00e9 es el patr\u00f3n MVC &#8211; Aprender a crear nuestro propio framework PHP"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Hasta ahora hemos visto&nbsp;el lenguaje de programaci\u00f3n <strong>PHP<\/strong> por un lado, y el lenguaje de consulta <strong>SQL<\/strong> utilizando <strong>MySQL<\/strong> por otro. Ahora toca unir ambas tecnolog\u00edas, o en otras palabras, no vimos como realizar un <strong>CRUD<\/strong> en PHP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CRUD viene de las siglas <strong>(CREATE, READ, UPDATE<\/strong> and <strong>DELETE<\/strong>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A lo largo de estos cap\u00edtulos que vienen vamos a aprender como estructurar nuestro proyecto para poder trabajar de la manera m\u00e1s \u00f3ptima posible, por lo que en esta tercera parte del curso vamos a ver como hacer un CRUD pero tambi\u00e9n como estructurar nuestro proyecto, y para ello vamos a basarnos en un patr\u00f3n de arquitectura muy conocido denominado <strong>MVC<\/strong> (<strong>Modelo Vista Controlador<\/strong>).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"810\" src=\"https:\/\/sutilweb.eu\/wp-content\/uploads\/2026\/01\/Patron-de-arquitectura-MVC-1024x810.png\" alt=\"\" class=\"wp-image-5345\" srcset=\"https:\/\/sutilweb.eu\/wp-content\/uploads\/2026\/01\/Patron-de-arquitectura-MVC-1024x810.png 1024w, https:\/\/sutilweb.eu\/wp-content\/uploads\/2026\/01\/Patron-de-arquitectura-MVC-300x237.png 300w, https:\/\/sutilweb.eu\/wp-content\/uploads\/2026\/01\/Patron-de-arquitectura-MVC-768x607.png 768w, https:\/\/sutilweb.eu\/wp-content\/uploads\/2026\/01\/Patron-de-arquitectura-MVC.png 1261w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">El&nbsp;Modelo Vista Controlador nos indica que deber\u00edamos separar nuestro c\u00f3digo dependiendo de la responsabilidad que tenga \u00e9ste, y lo va a agrupar en tres grandes grupos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Modelo<\/li>\n\n\n\n<li>Vista<\/li>\n\n\n\n<li>Controlador<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Modelo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En el modelo deber\u00edamos colocar todo el c\u00f3digo que se encargue de conectarse a una base de datos y hacer peticiones a nuestra base de datos, por ejm, el c\u00f3digo para poder crear un nuevo registro deber\u00eda encontrarse aqu\u00ed, lo mismo con las dem\u00e1s tareas siempre y cuando las dem\u00e1s tareas tengan que ver con la base de datos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vistas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a tener otro grupo denominado vistas en las cuales tenemos que colocar c\u00f3digo HTML. Todo lo que tiene que ver con HTML, como <strong>formularios, im\u00e1genes,<\/strong> el <strong>header,<\/strong> el <strong>footer&#8230;<\/strong> ha de colocarse aqu\u00ed<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Controlador<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Se trata de la parte m\u00e1s importante de nuestra aplicaci\u00f3n, el cerebro. En los controladores vamos a colocar la l\u00f3gica del negocio.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Flujo de la aplicaci\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando un usuario introduzca una URL en un navegador, a partir de la URL vamos a tener que mostrarle diferente contenido, por lo que dependiendo de lo que el usuario haya escrito en la URL vamos a asignarle el control de la ruta de dicha URL a un determinado controlador. En ese controlador tenemos que haber definido que es lo que se va a realizar. Si necesitamos conectarnos con la base de datos, lo que hace este controlador es llamar al modelo encargado de realizar todas estas consultas para que el modelo haga la consulta a la base de datos y le devuelva esos valores, una vez obtenidos esos valores, el controlador dice OK&nbsp;y llama a la vista que se va a encargar de mostrar todo ese contenido, le pasa la informaci\u00f3n que el modelo le ha devuelto para poder imprimir y una vez que la vista lo ha colocado dentro del archivo HTML, retorna al controlador, y finalmente el controlador muestra esa vista con todos los datos mostrados en la pantalla o el ordenador de la persona que lo solicit\u00f3.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como podemos ver, este controlador no se encarga de hacer la consulta a la base de datos, ni tampoco escribir c\u00f3digo HTML, su funci\u00f3n es dirigir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si utilizamos este patr\u00f3n, no vamos a escribir todo en un mismo archivo, sino que vamos a tener que separar responsabilidades.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hasta ahora hemos visto&nbsp;el lenguaje de programaci\u00f3n PHP por un lado, y el lenguaje de consulta SQL utilizando MySQL por otro. Ahora&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":4518,"menu_order":46,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-5343","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":"Hasta ahora hemos visto&nbsp;el lenguaje de programaci\u00f3n PHP por un lado, y el lenguaje de consulta SQL utilizando MySQL por otro. Ahora...","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/5343","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=5343"}],"version-history":[{"count":2,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/5343\/revisions"}],"predecessor-version":[{"id":5346,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/5343\/revisions\/5346"}],"up":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/4518"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=5343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}