<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Henry Stivens Adarme Muñoz</title>
	<atom:link href="https://kumbiaphp.com/blog/author/henrystivens/feed/" rel="self" type="application/rss+xml" />
	<link>https://kumbiaphp.com/blog/author/henrystivens/</link>
	<description>Web &#38; app MVC PHP framework</description>
	<lastBuildDate>Mon, 31 Aug 2026 19:27:09 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.4</generator>

<image>
	<url>https://kumbiaphp.com/blog/wp-content/uploads/2016/01/250-150x150.png</url>
	<title>Henry Stivens Adarme Muñoz</title>
	<link>https://kumbiaphp.com/blog/author/henrystivens/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">123854898</site>	<item>
		<title>Actualizamos la documentación de KumbiaPHP</title>
		<link>https://kumbiaphp.com/blog/2026/08/31/actualizamos-documentacion-kumbiaphp/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=actualizamos-documentacion-kumbiaphp</link>
					<comments>https://kumbiaphp.com/blog/2026/08/31/actualizamos-documentacion-kumbiaphp/#respond</comments>
		
		<dc:creator><![CDATA[HenryStivens]]></dc:creator>
		<pubDate>Mon, 31 Aug 2026 19:26:51 +0000</pubDate>
				<category><![CDATA[Documentación]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriales y screencast]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[MVC framework]]></category>
		<guid isPermaLink="false">https://kumbiaphp.com/blog/?p=3172</guid>

					<description><![CDATA[<p>La documentación de KumbiaPHP continúa mejorando para ofrecer ejemplos más precisos, explicaciones más claras y una experiencia de aprendizaje&#8230;</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2026/08/31/actualizamos-documentacion-kumbiaphp/">Actualizamos la documentación de KumbiaPHP</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">La <strong>documentación de KumbiaPHP</strong> continúa mejorando para ofrecer ejemplos más precisos, explicaciones más claras y una experiencia de aprendizaje más sencilla. Durante los últimos días se incorporaron varias actualizaciones al manual, con especial atención en ActiveRecord, seguridad y el tutorial de CRUD.</p>



<h2 class="wp-block-heading">Mejoras en ActiveRecord</h2>



<p class="wp-block-paragraph">Se corrigieron ejemplos de validación que contenían sintaxis PHP incorrecta y se ajustaron argumentos y mensajes para que correspondan con la API actual de KumbiaPHP. También se repararon ejemplos relacionados con callbacks y validaciones de correo electrónico.</p>



<p class="wp-block-paragraph">La documentación de paginación también fue revisada. El ejemplo completo ahora conserva correctamente las condiciones de búsqueda y el estado de la paginación entre las diferentes solicitudes, además de corregir referencias a propiedades, comparaciones y archivos de las vistas.</p>



<p class="wp-block-paragraph">Otro cambio importante fue la actualización de la referencia de la API de ActiveRecord. Se alinearon firmas de métodos, valores de retorno, convenciones de fechas, configuración y ejemplos con el comportamiento actual del framework.</p>



<p class="wp-block-paragraph">Sin embargo, también se recomienda revisar la opción de utilizar el <strong><a href="https://github.com/KumbiaPHP/ActiveRecord/">nuevo ActiveRecord</a></strong>, ya que incorpora mejoras de <strong>optimización y seguridad</strong> que pueden beneficiar a las aplicaciones que utilizan KumbiaPHP.</p>



<span id="more-3172"></span>



<h2 class="wp-block-heading">Documentación de seguridad más precisa</h2>



<p class="wp-block-paragraph">La seguridad también recibió una revisión importante.</p>



<p class="wp-block-paragraph">Se eliminó de la documentación una afirmación incorrecta sobre la protección automática de ActiveRecord frente a inyecciones SQL. Ahora se explica con mayor claridad la diferencia entre el filtrado de solicitudes, el manejo de SQL, las consultas sin parámetros y el escape de contenido HTML.</p>



<p class="wp-block-paragraph">El objetivo es que la documentación no solo muestre cómo utilizar el framework, sino que también ayude a comprender sus límites y a desarrollar aplicaciones más seguras.</p>



<h2 class="wp-block-heading">Un tutorial CRUD más fácil de seguir</h2>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-index-view-page-2.jpg"><img fetchpriority="high" decoding="async" width="1024" height="634" data-id="3174" src="https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-index-view-page-2-1024x634.jpg" alt="Segunda página de la lista de menús con los enlaces Anterior y Siguiente" class="wp-image-3174" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-index-view-page-2-1024x634.jpg 1024w, https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-index-view-page-2-300x186.jpg 300w, https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-index-view-page-2-768x476.jpg 768w, https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-index-view-page-2-940x582.jpg 940w, https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-index-view-page-2.jpg 1332w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-delete-success-fomr.jpg"><img decoding="async" width="1024" height="634" data-id="3175" src="https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-delete-success-fomr-1024x634.jpg" alt="Lista de menús después de eliminar un registro y mostrar el mensaje Operación exitosa" class="wp-image-3175" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-delete-success-fomr-1024x634.jpg 1024w, https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-delete-success-fomr-300x186.jpg 300w, https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-delete-success-fomr-768x476.jpg 768w, https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-delete-success-fomr-940x582.jpg 940w, https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-delete-success-fomr.jpg 1332w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-edit-sucess-form.jpg"><img decoding="async" width="1024" height="634" data-id="3176" src="https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-edit-sucess-form-1024x634.jpg" alt="Lista de menús mostrando el título actualizado del registro editado" class="wp-image-3176" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-edit-sucess-form-1024x634.jpg 1024w, https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-edit-sucess-form-300x186.jpg 300w, https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-edit-sucess-form-768x476.jpg 768w, https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-edit-sucess-form-940x582.jpg 940w, https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-edit-sucess-form.jpg 1332w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-create-success-form.jpg"><img loading="lazy" decoding="async" width="1024" height="634" data-id="3177" src="https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-create-success-form-1024x634.jpg" alt="Formulario de creación de menú mostrando el mensaje Operación exitosa después del envío" class="wp-image-3177" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-create-success-form-1024x634.jpg 1024w, https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-create-success-form-300x186.jpg 300w, https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-create-success-form-768x476.jpg 768w, https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-create-success-form-940x582.jpg 940w, https://kumbiaphp.com/blog/wp-content/uploads/2026/08/kumbiaphp-menus-create-success-form.jpg 1332w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>
</figure>



<p class="wp-block-paragraph">El tutorial de CRUD fue reorganizado para ofrecer una experiencia más progresiva, especialmente para quienes están comenzando con KumbiaPHP.</p>



<p class="wp-block-paragraph">La nueva versión explica el flujo de datos y la relación con MVC, incorpora pasos para CRUD, rutas, paginación y verificación, además de incluir una sección de solución de problemas y una lista de comprobación. También se añadieron 14 capturas de pantalla con textos alternativos descriptivos y captions en Markdown.</p>



<p class="wp-block-paragraph">Estas mejoras permiten seguir el tutorial de principio a fin y comprender no solo qué código escribir, sino también cómo se relacionan las diferentes partes de una aplicación KumbiaPHP.</p>



<h2 class="wp-block-heading">Seguimos mejorando</h2>



<p class="wp-block-paragraph">Estas actualizaciones son parte del trabajo continuo para mantener la documentación de KumbiaPHP alineada con el framework y hacerla más útil tanto para desarrolladores experimentados como para quienes están aprendiendo.</p>



<p class="wp-block-paragraph">Puedes consultar los cambios directamente en <a href="https://github.com/KumbiaPHP/Documentation">GitHub</a>:</p>



<ul class="wp-block-list">
<li><a href="https://github.com/KumbiaPHP/Documentation/pull/90?utm_source=chatgpt.com">PR #90, correcciones de ejemplos de ActiveRecord</a></li>



<li><a href="https://github.com/KumbiaPHP/Documentation/pull/91?utm_source=chatgpt.com">PR #91, correcciones del ejemplo de paginación</a></li>



<li><a href="https://github.com/KumbiaPHP/Documentation/pull/92?utm_source=chatgpt.com">PR #92, mejoras de documentación sobre seguridad SQL</a></li>



<li><a href="https://github.com/KumbiaPHP/Documentation/pull/93?utm_source=chatgpt.com">PR #93, actualización de la referencia de ActiveRecord</a></li>



<li><a href="https://github.com/KumbiaPHP/Documentation/pull/97?utm_source=chatgpt.com">PR #97, mejora del tutorial de CRUD</a></li>
</ul>



<p class="wp-block-paragraph">La documentación es una parte fundamental del proyecto. Mantenerla actualizada ayuda a que KumbiaPHP siga siendo más fácil de aprender, utilizar y mantener.</p>



<p class="wp-block-paragraph"></p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2026/08/31/actualizamos-documentacion-kumbiaphp/">Actualizamos la documentación de KumbiaPHP</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kumbiaphp.com/blog/2026/08/31/actualizamos-documentacion-kumbiaphp/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3172</post-id>	</item>
		<item>
		<title>KumbiaPHP Agent Skills: IA para el framework PHP</title>
		<link>https://kumbiaphp.com/blog/2026/08/26/kumbiaphp-agent-skills/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=kumbiaphp-agent-skills</link>
					<comments>https://kumbiaphp.com/blog/2026/08/26/kumbiaphp-agent-skills/#respond</comments>
		
		<dc:creator><![CDATA[HenryStivens]]></dc:creator>
		<pubDate>Wed, 26 Aug 2026 17:28:11 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[noticias]]></category>
		<guid isPermaLink="false">https://kumbiaphp.com/blog/?p=3155</guid>

					<description><![CDATA[<p>Las KumbiaPHP Agent Skills preparan el framework para trabajar con la nueva generación de agentes de inteligencia artificial capaces&#8230;</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2026/08/26/kumbiaphp-agent-skills/">KumbiaPHP Agent Skills: IA para el framework PHP</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Las <strong>KumbiaPHP Agent Skills</strong> preparan el framework para trabajar con la nueva generación de agentes de inteligencia artificial capaces de analizar proyectos, modificar código, ejecutar pruebas y participar en tareas completas de desarrollo. Con este nuevo repositorio, KumbiaPHP amplía su esfuerzo de actualización y lleva el conocimiento del framework a un formato que también puede ser utilizado por los agentes de IA.</p>



<p class="wp-block-paragraph">En este nuevo escenario, un framework no solo necesita estar actualizado para los desarrolladores, sino que también debe ofrecer a estos nuevos agentes el contexto necesario para entender cómo debe utilizarse. Con ese objetivo nace el repositorio KumbiaPHP Agent Skills, una nueva iniciativa de la comunidad para preparar el ecosistema para esta nueva etapa del desarrollo de software.</p>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a target="_blank" rel="noopener" href="https://github.com/KumbiaPHP/agents-skills">https://github.com/KumbiaPHP/agents-skills</a></p>



<h2 class="wp-block-heading">¿Qué son las KumbiaPHP Agent Skills?</h2>



<p class="wp-block-paragraph">Las KumbiaPHP Agent Skills son un conjunto de instrucciones estructuradas diseñadas para que los agentes de inteligencia artificial puedan trabajar correctamente con el framework. A diferencia de la documentación tradicional, que está pensada para humanos, las Agent Skills están diseñadas para responder las dudas clave de los agentes, indicándoles cuándo usar una funcionalidad específica, qué decisiones arquitectónicas deben respetar, las convenciones propias del framework y cómo evitar errores conceptuales al generar código. Estas habilidades utilizan el estándar abierto Agent Skills, basado en archivos <code class="" data-line="">SKILL.md</code> alojados dentro de carpetas especializadas.</p>



<span id="more-3155"></span>



<h2 class="wp-block-heading">Independencia de proveedores</h2>



<p class="wp-block-paragraph">El repositorio KumbiaPHP Agent Skills no está ligado a ninguna herramienta específica. Al no depender de asistentes concretos como Claude, GitHub Copilot, OpenCode o Codex, se convierte en una capa de conocimiento reutilizable para cualquier sistema compatible con el estándar. El objetivo no es crear una integración cerrada, sino construir una base de conocimiento universal para la IA aplicada a KumbiaPHP.</p>



<h2 class="wp-block-heading">Primeras KumbiaPHP Agent Skills disponibles</h2>



<p class="wp-block-paragraph">La primera versión del repositorio incluye cuatro Agent Skills fundamentales:</p>



<figure class="wp-block-image size-large is-resized"><a href="https://kumbiaphp.com/blog/wp-content/uploads/2026/08/KumbiaPHP-Skill-Management-2026-08-26-171428-min.svg"><img decoding="async" src="https://kumbiaphp.com/blog/wp-content/uploads/2026/08/KumbiaPHP-Skill-Management-2026-08-26-171428-min.svg" alt="KumbiaPHP Agent Skills" class="wp-image-3161" style="aspect-ratio:2.900886453286083;width:840px;height:auto"/></a></figure>



<p class="wp-block-paragraph"><strong>1. Crear controladores (kumbiaphp-create-controller)</strong></p>



<p class="wp-block-paragraph">Define cómo deben crearse y modificarse los controladores en el framework. Instruye a la IA para que revise los controladores existentes, respete la jerarquía de <code class="" data-line="">AppController</code> y mantenga la lógica de negocio estrictamente en los modelos. Al evitar la sobrecarga del controlador, esta Skill garantiza que el código generado mantenga siempre una arquitectura MVC limpia y ordenada.</p>



<p class="wp-block-paragraph"><strong>2. Crear modelos (kumbiaphp-create-model)</strong></p>



<p class="wp-block-paragraph">Orientada a los modelos basados en ActiveRecord, esta instrucción guía a la IA en la revisión del esquema de la base de datos y en el uso de los patrones nativos del framework. Al enseñarle a evitar capas innecesarias —como repositorios externos— y a adaptarse al código del proyecto, su principal beneficio es asegurar que todas las soluciones respeten fielmente el estilo nativo de KumbiaPHP.</p>



<p class="wp-block-paragraph"><strong>3. Crear vistas (kumbiaphp-create-view)</strong></p>



<p class="wp-block-paragraph">Esta habilidad define cómo trabajar con las vistas <code class="" data-line="">.phtml</code>. Obliga al agente a revisar el controlador asociado, a aprovechar los layouts y helpers existentes, y a evitar la inclusión de lógica de negocio en la interfaz. El resultado directo de estas reglas es la generación de vistas mucho más limpias, coherentes y con una separación estricta del patrón MVC.</p>



<p class="wp-block-paragraph"><strong>4. ActiveRecord (kumbiaphp-work-with-active-record)</strong></p>



<p class="wp-block-paragraph">Es la Skill más completa del sistema y abarca la formulación de consultas, paginación, relaciones, validaciones y operaciones CRUD. Además, incorpora reglas de seguridad vitales, educando a la IA sobre el control de campos permitidos y la precaución con las consultas dinámicas, mientras evita malas prácticas heredadas de otros ORM. Esto proporciona un equilibrio perfecto entre la seguridad de los datos y la consistencia general del framework.</p>



<h2 class="wp-block-heading">Principios KISS, DRY y MVC en la IA</h2>



<p class="wp-block-paragraph">Estas directrices refuerzan los principios fundamentales de <a href="https://kumbiaphp.com/blog/about/">KumbiaPHP</a>, asegurando que la IA aplique la filosofía KISS (<em>Keep It Simple</em>), DRY (<em>Don’t Repeat Yourself</em>), mantenga el patrón MVC bien separado y priorice el uso de las APIs nativas del framework. Adicionalmente, exigen que los agentes verifiquen la versión real de KumbiaPHP antes de asumir comportamientos, previniendo los clásicos errores que ocurren cuando la IA mezcla funciones de distintas versiones de PHP u otros frameworks.</p>



<h2 class="wp-block-heading">KumbiaPHP Agent Skills y el futuro del framework</h2>



<p class="wp-block-paragraph">Este repositorio no es un experimento aislado, sino una evolución natural del ecosistema KumbiaPHP. Hoy en día, no basta con que un framework sea estable, esté bien documentado y se mantenga actualizado; también debe ser comprensible para los agentes de IA, compatible con herramientas de desarrollo asistido y estar estructurado para su consumo automático. Esto introduce un concepto vital para la supervivencia del software: el contexto del framework también debe mantenerse actualizado para las máquinas.</p>



<p class="wp-block-paragraph">Las KumbiaPHP Agent Skills representan un cambio importante en la forma en que los frameworks se preparan para el futuro. Ya no basta con documentar para humanos; ahora también es indispensable documentar para los agentes de inteligencia artificial. Con este repositorio, KumbiaPHP da un paso al frente y se posiciona como un framework completamente preparado para la nueva generación de herramientas de desarrollo asistido por IA.</p>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a target="_blank" rel="noopener" href="https://github.com/KumbiaPHP/agents-skills">https://github.com/KumbiaPHP/agents-skills</a></p>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a target="_blank" rel="noopener" href="https://agentskills.io/specification">https://agentskills.io/specification</a></p>



<p class="wp-block-paragraph"></p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2026/08/26/kumbiaphp-agent-skills/">KumbiaPHP Agent Skills: IA para el framework PHP</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kumbiaphp.com/blog/2026/08/26/kumbiaphp-agent-skills/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3155</post-id>	</item>
		<item>
		<title>KumbiaPHP y PHP 8.5: mejoras del framework</title>
		<link>https://kumbiaphp.com/blog/2026/08/04/kumbiaphp-php-8-5/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=kumbiaphp-php-8-5</link>
					<comments>https://kumbiaphp.com/blog/2026/08/04/kumbiaphp-php-8-5/#respond</comments>
		
		<dc:creator><![CDATA[HenryStivens]]></dc:creator>
		<pubDate>Tue, 04 Aug 2026 04:31:00 +0000</pubDate>
				<category><![CDATA[Comunidad]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[anuncios]]></category>
		<category><![CDATA[noticias]]></category>
		<guid isPermaLink="false">https://kumbiaphp.com/blog/?p=3127</guid>

					<description><![CDATA[<p>KumbiaPHP y PHP 8.5: avances clave para un desarrollo más sólido KumbiaPHP y PHP 8.5 representan un paso importante&#8230;</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2026/08/04/kumbiaphp-php-8-5/">KumbiaPHP y PHP 8.5: mejoras del framework</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">KumbiaPHP y PHP 8.5: avances clave para un desarrollo más sólido</h2>



<p class="wp-block-paragraph"><strong>KumbiaPHP y PHP 8.5</strong> representan un paso importante para mantener el framework actualizado, estable y preparado para nuevos proyectos. Las mejoras recientes fortalecen la consola, amplían las pruebas automatizadas y facilitan la colaboración de la comunidad.</p>



<p class="wp-block-paragraph">Desde la publicación de KumbiaPHP 1.2.1, el proyecto ha seguido evolucionando sin abandonar su objetivo principal: ofrecer una experiencia de desarrollo simple, rápida y productiva.</p>



<h2 class="wp-block-heading">Resumen</h2>



<ul class="wp-block-list">
<li>La consola reconoce mejor la ubicación de las aplicaciones.</li>



<li>Los errores relacionados con rutas son más claros.</li>



<li>Se evitaron avisos innecesarios al ejecutar comandos.</li>



<li>Las pruebas automatizadas cubren desde PHP 8.0 hasta PHP 8.5.</li>



<li>Se mejoró la compatibilidad con Workerman 5.</li>



<li>Se añadieron nuevas pruebas para la consola y la gestión de hojas de estilo.</li>



<li>La comunidad dispone de mejores guías para contribuir.</li>



<li>Continúan en desarrollo mejoras para PostgreSQL, autenticación, formularios y <code class="" data-line="">Registry</code>.</li>
</ul>



<span id="more-3127"></span>



<h2 class="wp-block-heading">KumbiaPHP y PHP 8.5: una base más confiable</h2>



<p class="wp-block-paragraph">La compatibilidad entre <strong>KumbiaPHP y PHP 8.5</strong> ayuda a que el framework pueda utilizarse en entornos actuales sin dejar atrás los proyectos existentes.</p>



<p class="wp-block-paragraph">La matriz de pruebas automatizadas cubre ahora desde PHP 8.0 hasta PHP 8.5. Esto permite detectar incompatibilidades y elementos deprecados antes de que lleguen a afectar las aplicaciones.</p>



<p class="wp-block-paragraph">También se realizaron ajustes para mantener la compatibilidad con Workerman 5, especialmente en el uso de temporizadores y en el proceso de inicio del servidor.</p>



<p class="wp-block-paragraph">En conjunto, estos cambios crean una base más sólida para desarrollar aplicaciones con versiones recientes de PHP.</p>



<h2 class="wp-block-heading">Una consola más clara y predecible</h2>



<p class="wp-block-paragraph">La consola de KumbiaPHP ahora reconoce con mayor facilidad la ubicación de una aplicación.</p>



<p class="wp-block-paragraph">La opción <code class="" data-line="">--path</code> puede apuntar directamente al directorio de la aplicación o a la raíz de un proyecto que contenga la estructura habitual del framework.</p>



<p class="wp-block-paragraph">Cuando una ruta no existe o no contiene una aplicación válida, la consola muestra un mensaje más claro. Esto facilita la identificación del problema y evita perder tiempo revisando configuraciones incorrectas.</p>



<p class="wp-block-paragraph">También se corrigió un aviso que podía aparecer cuando <code class="" data-line="">application.production</code> no estaba definido. En ese caso, la consola utiliza un valor predeterminado seguro, sin modificar la configuración del proyecto.</p>



<p class="wp-block-paragraph">Estas mejoras permiten ejecutar comandos desde diferentes ubicaciones con un comportamiento más consistente.</p>



<h2 class="wp-block-heading">Más pruebas para proteger la estabilidad</h2>



<p class="wp-block-paragraph">Las pruebas automatizadas son una parte esencial para mantener KumbiaPHP estable.</p>



<p class="wp-block-paragraph">Además de ampliar la compatibilidad con distintas versiones de PHP, se añadieron pruebas específicas para la consola y para la gestión de hojas de estilo mediante <code class="" data-line="">Css</code>.</p>



<p class="wp-block-paragraph">Estas pruebas comprueban aspectos como:</p>



<ul class="wp-block-list">
<li>El orden de los archivos.</li>



<li>La eliminación de duplicados.</li>



<li>El manejo de dependencias.</li>



<li>Las llamadas repetidas.</li>



<li>Las rutas dentro de subdirectorios.</li>
</ul>



<p class="wp-block-paragraph">Con esta cobertura, resulta más sencillo detectar regresiones antes de integrar nuevos cambios.</p>



<h2 class="wp-block-heading">Un camino más sencillo para contribuir</h2>



<p class="wp-block-paragraph">KumbiaPHP también ha mejorado la documentación dirigida a la comunidad.</p>



<p class="wp-block-paragraph">El proyecto cuenta ahora con una guía de contribución que explica cómo preparar cambios, ejecutar pruebas y enviar propuestas al repositorio.</p>



<p class="wp-block-paragraph">También se añadieron un código de conducta y una política para reportar vulnerabilidades de seguridad.</p>



<p class="wp-block-paragraph">Estas mejoras ofrecen un entorno más claro y seguro para quienes desean colaborar, proponer correcciones o ayudar a revisar el código.</p>



<p class="wp-block-paragraph">La documentación también incluye información sobre la estructura del proyecto, las versiones compatibles y las prácticas recomendadas para trabajar en el framework.</p>



<h2 class="wp-block-heading">Qué sigue en desarrollo</h2>



<p class="wp-block-paragraph">Varias mejoras continúan en revisión y todavía no forman parte de la rama principal.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Área</th><th>Mejora propuesta</th></tr></thead><tbody><tr><td><code class="" data-line="">Registry</code></td><td>Conservar el valor original y convertirlo en una colección solo cuando sea necesario</td></tr><tr><td>Formularios</td><td>Respetar correctamente los valores enviados mediante POST en checkbox y radio</td></tr><tr><td>Autenticación</td><td>Mantener el encabezado <code class="" data-line="">Authorization</code> con Apache, CGI o FastCGI</td></tr><tr><td>PostgreSQL</td><td>Mejorar la detección de tablas cuando se utilizan distintos esquemas</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Estas propuestas buscan resolver situaciones reales encontradas en diferentes entornos de desarrollo.</p>



<p class="wp-block-paragraph">Mientras continúen en revisión, no deben considerarse funcionalidades disponibles de manera general.</p>



<h2 class="wp-block-heading">Problemas que aún necesitan una solución</h2>



<p class="wp-block-paragraph">También se han identificado dos situaciones que requieren una implementación más completa.</p>



<p class="wp-block-paragraph">La primera está relacionada con las asociaciones <code class="" data-line="">belongs_to</code>. Actualmente, puede resultar difícil diferenciar entre una relación declarada cuyo registro no existe y una relación que nunca fue configurada.</p>



<p class="wp-block-paragraph">Distinguir ambos casos permitiría mostrar errores más precisos y simplificar la depuración.</p>



<p class="wp-block-paragraph">La segunda está relacionada con los adaptadores de bases de datos. Los valores SQL y los identificadores, como nombres de tablas, columnas o esquemas, necesitan tratamientos diferentes.</p>



<p class="wp-block-paragraph">Separarlos claramente ayudaría a mejorar la seguridad y la consistencia de las consultas.</p>



<h2 class="wp-block-heading">Cómo ayudar a fortalecer KumbiaPHP</h2>



<p class="wp-block-paragraph">La mejor forma de apoyar estos avances es probar KumbiaPHP en proyectos y entornos reales.</p>



<p class="wp-block-paragraph">Quienes utilicen la consola, Workerman, PostgreSQL, FastCGI, formularios o <code class="" data-line="">Registry</code> pueden compartir sus resultados indicando:</p>



<ul class="wp-block-list">
<li>La versión de PHP utilizada.</li>



<li>El sistema operativo o entorno de ejecución.</li>



<li>Los pasos necesarios para reproducir el comportamiento.</li>



<li>El resultado esperado.</li>



<li>El resultado obtenido.</li>
</ul>



<p class="wp-block-paragraph">Antes de proponer un cambio, conviene consultar <a href="https://github.com/KumbiaPHP/KumbiaPHP/blob/master/CONTRIBUTING.md"><code class="" data-line="">CONTRIBUTING.md</code></a> y acompañar cada corrección con una prueba enfocada.</p>



<p class="wp-block-paragraph">Los avances de <strong>KumbiaPHP y PHP 8.5</strong> muestran que el framework puede conservar su sencillez mientras fortalece su compatibilidad, estabilidad y capacidad de evolución. Cada prueba, reporte y contribución ayuda a construir una base más sólida para toda la comunidad.</p>



<p class="wp-block-paragraph"></p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2026/08/04/kumbiaphp-php-8-5/">KumbiaPHP y PHP 8.5: mejoras del framework</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kumbiaphp.com/blog/2026/08/04/kumbiaphp-php-8-5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3127</post-id>	</item>
		<item>
		<title>Chatbots inteligentes en PHP con KumbiaPHP</title>
		<link>https://kumbiaphp.com/blog/2025/11/07/chatbots-inteligentes-en-php-con-kumbiaphp/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=chatbots-inteligentes-en-php-con-kumbiaphp</link>
					<comments>https://kumbiaphp.com/blog/2025/11/07/chatbots-inteligentes-en-php-con-kumbiaphp/#respond</comments>
		
		<dc:creator><![CDATA[HenryStivens]]></dc:creator>
		<pubDate>Fri, 07 Nov 2025 06:00:00 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Tutoriales y screencast]]></category>
		<category><![CDATA[ejemplos]]></category>
		<guid isPermaLink="false">https://kumbiaphp.com/blog/?p=2975</guid>

					<description><![CDATA[<p>¿Qué es un chatbot inteligente? Un chatbot con PHP es un asistente virtual que usa inteligencia artificial para simular&#8230;</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2025/11/07/chatbots-inteligentes-en-php-con-kumbiaphp/">Chatbots inteligentes en PHP con KumbiaPHP</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: center;"><iframe loading="lazy" title="YouTube video player" src="https://www.youtube.com/embed/ksijcOJSRAY?si=EPYBZNdJ6_KcJo0U" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>

<h2>¿Qué es un chatbot inteligente?</h2>
<p>Un chatbot con <a href="https://kumbiaphp.com/blog/category/php/">PHP</a> es un asistente virtual que usa inteligencia artificial para simular una conversación natural con usuarios, realizando tareas como responder preguntas, agendar citas, brindar soporte técnico y más. Implementar un chatbot inteligente utilizando PHP puede potenciar significativamente tu aplicación web.</p>
<p data-pm-slice="1 1 []">Veremos paso a paso cómo configurar las dependencias, conectar con el modelo GPT-4 y construir una interfaz simple que permita interactuar con el asistente directamente desde tu aplicación web.</p>
<h2>Herramientas recomendadas para crear chatbots con PHP</h2>
<ul data-spread="false">
<li>
<p><a href="https://openai.com/es-ES/api/"><strong>OpenAI API</strong></a>: Facilita el acceso a modelos avanzados como GPT-4 para procesamiento de lenguaje natural y es ideal para construir un chatbot con PHP.</p>
</li>
<li>
<p><a href="https://dialogflow.cloud.google.com/"><strong>Dialogflow</strong></a>: Servicio gestionado de Google que simplifica la creación de interfaces conversacionales y puede integrarse fácilmente como chatbot con PHP.</p>
</li>
<li>
<p><a href="https://rasa.com/"><strong>Rasa</strong></a>: Alternativa open source para chatbots personalizados y con mayor control, perfecta para crear un chatbot con PHP.</p>
</li>
</ul>
<h2>Creando un chatbot con PHP y KumbiaPHP usando la API de OpenAI</h2>
<h4>Paso 1: Instalar dependencias</h4>
<p>Usa Composer para instalar la librería oficial de OpenAI para tu chatbot con PHP (<a href="https://packagist.org/packages/openai-php/client">Packagist de</a><br /><a href="https://packagist.org/packages/openai-php/client">OpenAI PHP</a>):</p>


<pre class="wp-block-code language-bash"><code class="" data-line="">composer require openai-php/client</code></pre>



<span id="more-2975"></span>


<h4 data-pm-slice="1 1 []">Paso 2: Configuración específica para OpenAI</h4>
<p>Crea un archivo específico para la configuración en <em>config/openai.php</em> para tu chatbot con PHP:</p>


<pre class="wp-block-code language-php"><code class="" data-line="">&lt;?php

return &#091;
    &#039;api_key&#039; =&gt; &#039;TU_API_KEY&#039;,
    &#039;model&#039; =&gt; &#039;gpt-4-turbo&#039;,
    &#039;systemPrompt&#039; =&gt; 
        &#039;Eres un asistente útil. Te llamas Kumbita y amas Kumbiaphp&#039;,
];</code></pre>


<h4 data-pm-slice="1 1 []">Paso 3: Crear modelo para lógica de OpenAI</h4>
<p>Crea el archivo <em>app/models/open_ai_model.php</em>, esencial para desarrollar un chatbot con PHP:</p>


<pre class="wp-block-code language-php"><code class="" data-line="">&lt;?php

use \OpenAI\Client;

/**
 * OpenAI Service Model
 */
class OpenAiModel
{
    /**
     * @var OpenAiModel|null Instancia única de la clase
     */
    private static ?OpenAiModel $instance;

    /**
     * @var Client El cliente OpenAI
     */
    private Client $client;

    /**
     * @var array Configuración de OpenAI
     */
    private array $config;

    /**
     * Constructor para otras config
     *
     * @param array Configuración (opcional)
     */
    public function __construct(?array $config = null)
    {
        $this-&gt;config = $config ?? Config::read(&#039;openai&#039;);
        $this-&gt;client = OpenAI::client($this-&gt;config&#091;&#039;api_key&#039;]);
    }

    /**
     * Obtiene la instancia única del servicio
     *
     * @param array Configuración (opcional)
     * @return OpenAiModel
     */
    public static function getInstance(?array $config = null): self
    {
        return self::$instance ??= new self($config);
    }

    /**
     * Obtiene el cliente OpenAI
     * 
     * @return Client
     */
    public function getClient(): Client
    {
        return $this-&gt;client;
    }

    /**
     * Envía un mensaje a OpenAI y recibe la respuesta
     * 
     * @param string $message El mensaje del usuario
     * @param string $systemPrompt El prompt del sistema (opcional)
     *
     * @return string La respuesta del modelo
     */
    public function sendMessage(string $message, ?string $systemPrompt = null): string
    {
        $response = $this-&gt;client-&gt;chat()-&gt;create(&#091;
            &#039;model&#039; =&gt; $this-&gt;config&#091;&#039;model&#039;],
            &#039;messages&#039; =&gt; &#091;
                &#091;
                  &#039;role&#039; =&gt; &#039;system&#039;,
                  &#039;content&#039; =&gt; $systemPrompt ?? $this-&gt;config&#091;&#039;systemPrompt&#039;]
                ],
                &#091;
                  &#039;role&#039; =&gt; &#039;user&#039;,
                  &#039;content&#039; =&gt; $message
                ],
            ],
        ]);

        return $response-&gt;choices&#091;0]-&gt;message-&gt;content;
    }
}</code></pre>


<h4 data-pm-slice="1 1 []">Paso 4: Crear controlador Chatbot en KumbiaPHP</h4>


<pre class="wp-block-code language-php"><code class="" data-line="">&lt;?php

class ChatbotController extends AppController
{
    /**
     * Muestra el chatbot
     */
    public function index()
    {
    }

    /**
     * Endpoint para manejar mensajes del chatbot
     */
    public function message()
    {
        View::select(null, &#039;json&#039;);

        $message = Input::post(&#039;message&#039;);

        $this-&gt;data = match ($message) {
            null, &#039;&#039; =&gt; &#091;],
            default =&gt;  &#091;&#039;reply&#039; =&gt; OpenAiModel::getInstance()-&gt;sendMessage($message)],
        };
    }
}
</code></pre>


<h4 data-pm-slice="1 1 []">Paso 5: Crear la vista del chatbot en KumbiaPHP</h4>
<p>Crea la vista <em>index.phtml</em> en <em>app/views/chatbot/</em> para interactuar fácilmente con tu chatbot con PHP:</p>


<pre class="wp-block-code language-php"><code class="" data-line="">&lt;section id=&quot;aibot&quot;&gt;
    &lt;h1&gt;Chatbot Inteligente con PHP y KumbiaPHP&lt;/h1&gt;

    &lt;div id=&quot;chatResponse&quot;&gt;
        &lt;p&gt;
            &lt;b&gt;Kumbita:&lt;/b&gt; Hola, me llamo Kumbita. ¿Qué quieres saber hoy?
        &lt;/p&gt;
    &lt;/div&gt;

    &lt;?= Form::open(&#039;&#039;, &#039;POST&#039;, &#039;id=&quot;chatbot&quot;&#039;) ?&gt;
    &lt;?= Form::text(&#039;message&#039;, &#039;placeholder=&quot;Escribe tu pregunta&quot; autofocus&#039;) ?&gt;
    &lt;?= Form::submit(&#039;Enviar&#039;, &#039;class=&quot;btn btn-primary&quot;&#039;) ?&gt;
    &lt;?= Form::close() ?&gt;
&lt;/section&gt;

&lt;script&gt;
    document.getElementById(&quot;chatbot&quot;).addEventListener(&quot;submit&quot;,
        function(event) {
            event.preventDefault();
            sendMessage();
        });

    const messageEl = document.getElementById(&#039;message&#039;);
    const chatResponse = document.getElementById(&#039;chatResponse&#039;);
    const btnSubmit = document.querySelector(&#039;#chatbot &#091;type=&quot;submit&quot;]&#039;);
    const speech = &#039;speechSynthesis&#039; in window ? new SpeechSynthesisUtterance() : null;
    const apiError = &quot;Lo siento, parece que hay un error al conectar a la API&quot;;

    speak(&quot;Hola, me llamo Kumbita. ¿Qué quieres saber hoy?&quot;, &quot;es&quot;);

    function sendMessage() {
        const message = messageEl.value;
        if(message.trim() === &#039;&#039;) return;
        btnSubmit.disabled = true;
        messageEl.disabled = true;
        chatResponse.innerHTML += `&lt;p&gt;&lt;b&gt;Tu:&lt;/b&gt; ${message}&lt;/p&gt;&lt;div id=&quot;loading&quot;&gt;&lt;/div&gt;`;
        chatResponse.scrollTop = chatResponse.scrollHeight;

        fetch(&#039;/chatbot/message&#039;, {
                method: &#039;POST&#039;,
                headers: {
                    &#039;Content-Type&#039;: &#039;application/x-www-form-urlencoded&#039;,
                    &#039;Accept&#039;: &#039;application/json&#039;
                },
                body: &#039;message=&#039; + encodeURIComponent(message)
            })
            .then(response =&gt; response.json())
            .then(data =&gt; {
                response(data.reply ?? &quot;&quot;);
            })
            .catch(error =&gt; {
                console.log(error);
                response(apiError);
            })
            .finally(() =&gt; {
                btnSubmit.disabled = false;
                messageEl.disabled = false;
                messageEl.value = &#039;&#039;;
                messageEl.focus();
            });
    }

    function response(message) {
        speak(message);
        document.getElementById(&#039;loading&#039;).remove();
        chatResponse.innerHTML += `&lt;p&gt;&lt;b&gt;Kumbita:&lt;/b&gt; ${message}&lt;/p&gt;`;
        chatResponse.scrollTop = chatResponse.scrollHeight;
    }

    function speak(text, lang = navigator.language) {
        if(!speech) return;
        speech.lang = lang
        speech.text = text
        window.speechSynthesis.speak(speech)
    }
&lt;/script&gt;

&lt;style&gt;
    #aibot {
        max-width: 500px;
        margin: 0 auto;

        &amp; h1 {
            text-align: center;
        }

        &amp; #chatbot {
            display: flex;
            margin-top: 1em;
        }

        &amp; #message {
            flex: 1;
            border-radius: 2rem 0 0 2rem;
            padding: 0.5em 1em;
            box-shadow: none;

            &amp;:focus {
                outline: none;
            }
        }

        &amp; &#091;type=&quot;submit&quot;] {
            flex: 0;
            border-radius: 0 2rem 2rem 0;
            box-shadow: none;
            
            &amp;:disabled {
                opacity: 0.5;
            }
        }

        &amp; #chatResponse {
            margin: 20px auto 0;
            min-height: 60px;
            max-height: 400px;
            background: #f5f5f5;
            border-radius: 6px;
            padding: 1em;
            box-shadow: 1px 1px 5px #eee;
            overflow-y: auto;
            display: flex;
            flex-direction: column;

            &amp; p {
                color: #333;
            }
        }
    }
    #loading {
        width: 12px;
        height: 12px;
        border-radius: 50%;
        display: block;
        margin:15px auto;
        position: relative;
        color: #9ab8ef;
        box-sizing: border-box;
        animation: animloader 1s linear infinite alternate;
    }

    @keyframes animloader {
        0% {box-shadow: -38px -6px, -14px 6px,  14px -6px;}
        33% {box-shadow: -38px 6px, -14px -6px,  14px 6px;}
        66% {box-shadow: -38px -6px, -14px 6px, 14px -6px;}
        100% {box-shadow: -38px 6px, -14px -6px, 14px 6px;}
    }
&lt;/style&gt;
</code></pre>



<figure class="wp-block-image size-large"><a href="https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-chatbot-openai.jpg"><img loading="lazy" decoding="async" width="1024" height="576" src="https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-chatbot-openai-1024x576.jpg" alt="Chatbot inteligente con PHP Y KumbiaPHP" class="wp-image-2989" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-chatbot-openai-1024x576.jpg 1024w, https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-chatbot-openai-300x169.jpg 300w, https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-chatbot-openai-768x432.jpg 768w, https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-chatbot-openai-1536x864.jpg 1536w, https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-chatbot-openai-940x529.jpg 940w, https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-chatbot-openai.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>


<h3 data-pm-slice="1 1 []">Ventajas de usar chatbots en aplicaciones PHP</h3>
<ul data-spread="false">
<li>
<p>Disponibilidad 24/7.</p>
</li>
<li>
<p>Respuestas inmediatas y personalizadas.</p>
</li>
<li>
<p>Optimización de recursos humanos y reducción de costos operativos.</p>
</li>
</ul>
<p>Este ejemplo constituye una <strong>base sólida</strong> para comprender cómo integrar inteligencia artificial en tus proyectos PHP con KumbiaPHP. A partir de aquí, puedes ampliarlo añadiendo <strong>manejo de historial de conversación</strong>, <strong>personalización de prompts del sistema</strong>, <strong>validaciones adicionales de entrada</strong>, o incluso <strong>mecanismos de seguridad</strong> para evitar abusos en el endpoint.</p>
<p>Al finalizar esta guía, tendrás un chatbot completamente funcional listo para integrarse en cualquier proyecto desarrollado con KumbiaPHP. Anímate a probarlo, experimentar con sus respuestas y descubrir el potencial de combinar la sencillez de PHP con la potencia de la inteligencia artificial. Si te ha resultado útil, <strong>comparte este artículo</strong> o deja tus comentarios en el blog para seguir mejorando juntos.</p>


<h2 class="wp-block-heading">Agradecimientos</h2>



<p class="wp-block-paragraph">Agradecemos especialmente a @joanhey por tomarse el tiempo de revisar y mejorar el código de ejemplo, aportando sugerencias valiosas que ayudaron a hacerlo más claro y funcional para la comunidad de desarrolladores de KumbiaPHP.</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2025/11/07/chatbots-inteligentes-en-php-con-kumbiaphp/">Chatbots inteligentes en PHP con KumbiaPHP</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kumbiaphp.com/blog/2025/11/07/chatbots-inteligentes-en-php-con-kumbiaphp/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2975</post-id>	</item>
		<item>
		<title>Novedades del Manual de KumbiaPHP — noviembre 2025</title>
		<link>https://kumbiaphp.com/blog/2025/11/03/novedades-del-manual-de-kumbiaphp-noviembre-2025/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=novedades-del-manual-de-kumbiaphp-noviembre-2025</link>
					<comments>https://kumbiaphp.com/blog/2025/11/03/novedades-del-manual-de-kumbiaphp-noviembre-2025/#respond</comments>
		
		<dc:creator><![CDATA[HenryStivens]]></dc:creator>
		<pubDate>Mon, 03 Nov 2025 12:25:00 +0000</pubDate>
				<category><![CDATA[Documentación]]></category>
		<category><![CDATA[MVC framework]]></category>
		<guid isPermaLink="false">https://kumbiaphp.com/blog/?p=2961</guid>

					<description><![CDATA[<p>Ya están publicados nuevos contenidos y mejoras en la documentación: guías de instalación en Apache y Nginx (en inglés),&#8230;</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2025/11/03/novedades-del-manual-de-kumbiaphp-noviembre-2025/">Novedades del Manual de KumbiaPHP — noviembre 2025</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Ya están publicados nuevos contenidos y mejoras en la documentación: guías de instalación en <strong>Apache y Nginx (en inglés)</strong>, una <strong>guía “Primera App”</strong> en español totalmente revisada, <strong>instrucciones para instalar con Composer</strong> y una <strong>sección de Controladores</strong> clarificada y con imágenes nuevas. Todo esto alineado con <strong>KumbiaPHP 1.2 optimizado para PHP 8</strong>. Consulta el repo del manual para ver los cambios completos. (<a href="https://github.com/KumbiaPHP/Documentation">GitHub</a>)</p>



<h2 class="wp-block-heading">1) Nuevas guías: instalación en Apache y Nginx (en inglés)</h2>



<p class="wp-block-paragraph">Publicamos instrucciones claras para servir aplicaciones KumbiaPHP detrás de <strong>Apache</strong> (VirtualHosts) y <strong>Nginx</strong> (server blocks), destacando los puntos clave: usar <em>public/</em> como <em>document root</em> y habilitar las reglas de reescritura para el <em>front controller</em>. Estas guías facilitan el despliegue en entornos modernos sin dependencias innecesarias. <a href="https://github.com/KumbiaPHP/Documentation/tree/master/en" target="_blank" rel="noreferrer noopener">GitHub</a></p>



<figure class="wp-block-image size-full is-style-default"><a href="https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-virtual-host-example.jpg"><img loading="lazy" decoding="async" width="749" height="342" src="https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-virtual-host-example.jpg" alt="Apache apuntando a public/ con URLs limpias." class="wp-image-2963" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-virtual-host-example.jpg 749w, https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-virtual-host-example-300x137.jpg 300w" sizes="auto, (max-width: 749px) 100vw, 749px" /></a></figure>



<span id="more-2961"></span>



<figure class="wp-block-image size-full"><a href="https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-nginx-example.jpg"><img loading="lazy" decoding="async" width="769" height="494" src="https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-nginx-example.jpg" alt="Nginx + PHP-FPM con public/ como raíz del sitio." class="wp-image-2964" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-nginx-example.jpg 769w, https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-nginx-example-300x193.jpg 300w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></figure>



<p class="wp-block-paragraph"><strong>Qué encontrarás:</strong></p>



<ul class="wp-block-list">
<li>Estructura mínima y <em>document root</em> correcto (public/).</li>



<li>Directrices de reescritura para URLs limpias (<em>pretty URLs</em>).</li>



<li>Notas rápidas para PHP-FPM (Nginx) y módulos en Apache.</li>
</ul>



<h2 class="wp-block-heading">2) “Primera App” — más clara y didáctica</h2>



<p class="wp-block-paragraph">La guía <strong>Primera App</strong> fue reescrita con foco en personas que inician con MVC:</p>



<p class="wp-block-paragraph"><strong>a.</strong> Se <strong>aclaró la arquitectura MVC y el manejo de URLs</strong>, explicando cómo el <em>front controller</em> enruta /<em>controlador/acción/param</em> hacia tu lógica.<br><strong>b.</strong> <strong>Se actualizaron los ejemplos de controladores y vistas</strong>, con código más legible y ordenado.</p>



<figure class="wp-block-image size-full"><a href="https://kumbiaphp.com/blog/wp-content/uploads/2025/11/successful-installation.jpg"><img loading="lazy" decoding="async" width="960" height="540" src="https://kumbiaphp.com/blog/wp-content/uploads/2025/11/successful-installation.jpg" alt="Primera ejecución y render de vista básica." class="wp-image-2966" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2025/11/successful-installation.jpg 960w, https://kumbiaphp.com/blog/wp-content/uploads/2025/11/successful-installation-300x169.jpg 300w, https://kumbiaphp.com/blog/wp-content/uploads/2025/11/successful-installation-768x432.jpg 768w, https://kumbiaphp.com/blog/wp-content/uploads/2025/11/successful-installation-940x529.jpg 940w" sizes="auto, (max-width: 960px) 100vw, 960px" /></a></figure>



<p class="wp-block-paragraph"><strong>c.</strong> <strong>Se mejoraron los títulos y subtítulos</strong> para escanear mejor el contenido.<br><strong>d.</strong> <strong>Se reemplazaron capturas de pantalla</strong>, haciendo más evidente cada paso (crear controlador, renderizar vista, pasar variables).</p>



<h2 class="wp-block-heading">3) Instalación con Composer (nuevo apartado)</h2>



<p class="wp-block-paragraph">Ahora el manual incluye un flujo directo para iniciar proyectos con <strong>Composer</strong>:</p>



<p class="wp-block-paragraph"><strong>Requisitos mínimos:</strong> PHP 8.x recomendado.<br><strong>Pasos típicos:</strong></p>



<p class="wp-block-paragraph"><strong>1) Crear un nuevo proyecto base de KumbiaPHP</strong><br>composer create-project kumbia/framework myapp<br><strong>2) Entrar al proyecto</strong><br>cd myapp/default/app<br><strong>3) Iniciar servidor de desarrollo de PHP apuntando a public/</strong><br>./bin/phpserver</p>



<figure class="wp-block-image size-full"><a href="https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-composer-example.jpg"><img loading="lazy" decoding="async" width="769" height="494" src="https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-composer-example.jpg" alt="Proyecto KumbiaPHP generado con Composer en segundos.”" class="wp-image-2967" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-composer-example.jpg 769w, https://kumbiaphp.com/blog/wp-content/uploads/2025/11/kumbiaphp-composer-example-300x193.jpg 300w" sizes="auto, (max-width: 769px) 100vw, 769px" /></a></figure>



<p class="wp-block-paragraph">El paquete <strong>framework</strong> es el esqueleto básico para comenzar: genera la estructura y te deja listo para desarrollar. Si eres nuevo en Composer, la sección <a href="https://github.com/KumbiaPHP/Documentation/blob/master/es/to-install.md#instalaci%C3%B3n-con-composer">Instalación con Composer</a> te guiarán sobre cómo funciona <code class="" data-line="">composer.json</code> y los comandos principales.</p>



<h2 class="wp-block-heading">4) Controladores: contenido revisado + nuevas imágenes</h2>



<p class="wp-block-paragraph">La sección de <strong>Controladores</strong> se reordenó para mejorar la lectura y cubrir escenarios reales:</p>



<ul class="wp-block-list">
<li><strong>Validación de parámetros:</strong> número de parámetros, pasar valores a la vista, convenciones de nombrado, acciones y filtros.</li>



<li><strong>Controladores dinámicos:</strong> cuándo conviene y cómo mantenerlos legibles.</li>
</ul>



<h2 class="wp-block-heading">Enlaces rápidos</h2>



<ul class="wp-block-list">
<li><strong>Manual (repo):</strong> documentación central y carpetas es/ y en/. (<a href="https://github.com/KumbiaPHP/Documentation">GitHub</a>)</li>



<li><strong>Paquete framework en Packagist:</strong> referencias y enlaces al manual. (<a href="https://packagist.org/packages/kumbia/framework?utm_source=chatgpt.com">Packagist</a>)</li>
</ul>



<h2 class="wp-block-heading">Gracias a la comunidad <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f64c.png" alt="🙌" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h2>



<p class="wp-block-paragraph">Estas mejoras nacen de <em>pull requests</em> recientes y la colaboración constante de la comunidad. Si quieres proponer cambios, abre un PR en el repo del manual o únete al Slack para coordinar traducciones/imágenes adicionales. ¡Seguimos puliendo el contenido para que empezar con <strong>KumbiaPHP 1.2 (PHP 8)</strong> sea cada vez más fácil!</p>



<p class="wp-block-paragraph"></p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2025/11/03/novedades-del-manual-de-kumbiaphp-noviembre-2025/">Novedades del Manual de KumbiaPHP — noviembre 2025</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kumbiaphp.com/blog/2025/11/03/novedades-del-manual-de-kumbiaphp-noviembre-2025/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2961</post-id>	</item>
		<item>
		<title>Buscador avanzado de texto completo para KumbiaPHP con Meilisearch</title>
		<link>https://kumbiaphp.com/blog/2025/04/19/buscador-avanzado-texto-completo-kumbiaphp-meilisearch/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=buscador-avanzado-texto-completo-kumbiaphp-meilisearch</link>
					<comments>https://kumbiaphp.com/blog/2025/04/19/buscador-avanzado-texto-completo-kumbiaphp-meilisearch/#respond</comments>
		
		<dc:creator><![CDATA[HenryStivens]]></dc:creator>
		<pubDate>Sat, 19 Apr 2025 08:00:00 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Tutoriales y screencast]]></category>
		<category><![CDATA[buscador]]></category>
		<category><![CDATA[ejemplos]]></category>
		<guid isPermaLink="false">https://kumbiaphp.com/blog/?p=2903</guid>

					<description><![CDATA[<p>La entrada <a href="https://kumbiaphp.com/blog/2025/04/19/buscador-avanzado-texto-completo-kumbiaphp-meilisearch/">Buscador avanzado de texto completo para KumbiaPHP con Meilisearch</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<div style="text-align:center;"><iframe loading="lazy" width="560" height="315" src="https://www.youtube.com/embed/knyUp-Wleg4?si=b5TdpovBYkE4dCpm" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>



<p class="" data-start="271" data-end="624">Si estás buscando implementar un <strong data-start="304" data-end="374">buscador avanzado de texto completo para KumbiaPHP con <a href="https://www.meilisearch.com/">Meilisearch</a></strong>, este artículo te mostrará cómo hacerlo de manera sencilla, efectiva y escalable. Descubre cómo aprovechar todo el potencial de Meilisearch en tus aplicaciones KumbiaPHP, ofreciendo a tus usuarios búsquedas rápidas y resultados altamente relevantes.</p>
<h2>¿Por qué utilizar un buscador avanzado de texto completo para KumbiaPHP con Meilisearch?</h2>
<p>Implementar un <strong data-start="739" data-end="809">buscador avanzado de texto completo para KumbiaPHP con Meilisearch</strong> permite llevar las capacidades de búsqueda de tus aplicaciones a otro nivel. Meilisearch es un motor de búsqueda rápido, potente y de fácil configuración, ideal para aplicaciones modernas que requieren búsquedas en tiempo real, autocompletado y manejo de grandes volúmenes de datos.<br data-start="1020" data-end="1023" />Además, gracias a sus capacidades de búsqueda semántica impulsada por inteligencia artificial, se pueden obtener resultados mucho más precisos incluso cuando las palabras de búsqueda no coinciden exactamente con los términos indexados.</p>
<h2>Requisitos</h2>
<p>Antes de comenzar a integrar un <strong data-start="2097" data-end="2167">buscador avanzado de texto completo para KumbiaPHP con Meilisearch</strong>, verifica que tu entorno cumpla con los siguientes requisitos básicos:</p>
<ul>
<li>
<p>Tener una aplicación funcionando con <strong><a href="https://kumbiaphp.com/blog/manuales-y-descargas/">KumbiaPHP 1.2</a> o superior</strong>.</p>
</li>
<li>
<p>Tener <strong><a href="_wp_link_placeholder" data-wplink-edit="true">PHP 8.0</a> o superior</strong>.</p>
</li>
<li>
<p>Tener acceso al servidor o contenedor donde correrá <strong>Meilisearch</strong>.</p>
</li>
<li>
<p>Instalar el cliente de Meilisearch para PHP con Composer:</p>
</li>
</ul>
<pre><code class="language-bash" data-line="">composer require meilisearch/meilisearch-php \
guzzlehttp/guzzle \
http-interop/http-factory-guzzle:^1.0</code></pre>
<ul>
<li>
<p>Instalar el nuevo ActiveRecord de KumbiaPHP si aún no lo tienes:</p>
</li>
</ul>
<pre><code class="language-bash" data-line="">composer require kumbia/activerecord
</code></pre>
<blockquote>
<p>Este nuevo ActiveRecord es un componente externo que puedes usar en cualquier proyecto PHP, y es requerido para que los modelos soporten los callbacks usados por el trait MeilisearchSearchable.</p>
</blockquote>
<h2 id="configuraci%C3%B3n-del-cliente-meilisearch-singleton" class="code-line" dir="auto" data-line="31">Configuración del Cliente Meilisearch</h2>
<p class="code-line" dir="auto" data-line="33">Crea el archivo <em>default/app/config/meilisearch.php</em> con la siguiente estructura:</p>



<span id="more-2903"></span>



<pre class="wp-block-code language-php"><code class="" data-line="">&lt;?php
/**
 * MeiliSearch configuration file.
 *
 * This file contains the configuration settings for connecting to MeiliSearch.
 */
return &#091;
    &#039;host&#039; =&gt; &#039;http://127.0.0.1:7700&#039;, // Change the host
    &#039;api_key&#039; =&gt; &#039;&#039;, // Change the key
];
</code></pre>



<h2 id="integrando-meilisearch-con-el-trait-meilisearchsearchabletrait" class="code-line" dir="auto" data-line="63">Trait MeilisearchSearchableTrait</h2>
<p class="code-line" dir="auto" data-line="65">Crea el archivo&nbsp;<em>default/app/libs/meilisearch_searchable_trait.php</em> con el siguiente código:</p>



<pre class="wp-block-code language-php"><code class="" data-line="">&lt;?php

use Meilisearch\Client;

/**
 * Trait MeilisearchSearchableTrait
 */
trait MeilisearchSearchableTrait
{
    /**
     * MeiliSearch client instance.
     */
    protected static ?Client $_meiliClient = null;

    /**
     * Retrieves the MeiliSearch client instance.
     */
    protected static function getMeiliClient(): Client
    {
        if (null !== self::$_meiliClient) {
            return self::$_meiliClient;
        }

        $config = \Config::read(&#039;meilisearch&#039;);
        if (!$config || !is_array($config)) {
            throw new \RuntimeException(&#039;MeiliSearch configuration not found in config file.&#039;);
        }
        $host   = $config&#091;&#039;host&#039;] ?? &#039;http://localhost:7700&#039;;
        $apiKey = $config&#091;&#039;api_key&#039;] ?? &#039;&#039;;

        return self::$_meiliClient = new Client($host, $apiKey);
    }

    /**
     * Returns the index name. By default it returns the table name provided by the model.
     */
    protected static function searchableAs(): string
    {
        return static::getTable();
    }

    /**
     * Converts the model instance to an array for indexing.
     */
    abstract protected function toSearchArray(): array;

    /**
     * Callback executed after a model is created.
     * The new record is automatically added to the MeiliSearch index.
     */
    protected function _afterCreate(): void
    {
        self::getMeiliClient()
            -&gt;index(static::searchableAs())
            -&gt;addDocuments(&#091;$this-&gt;toSearchArray()]);
    }

    /**
     * Callback executed after a model is updated.
     * The updated record is synchronized in the MeiliSearch index.
     */
    protected function _afterUpdate(): void
    {
        self::getMeiliClient()
            -&gt;index(static::searchableAs())
            -&gt;updateDocuments(&#091;$this-&gt;toSearchArray()]);
    }

    /**
     * Deletes a record and synchronizes the deletion with the MeiliSearch index.
     */
    public static function delete($pk): bool
    {
        $deleted = parent::delete($pk);

        if ($deleted) {
            self::getMeiliClient()
                -&gt;index(static::searchableAs())
                -&gt;deleteDocument($pk);
        }

        return $deleted;
    }

    /**
     * Performs a search query on the MeiliSearch index.
     */
    public static function search(string $query, array $options = &#091;]): array
    {
        $results = self::getMeiliClient()
            -&gt;index(static::searchableAs())
            -&gt;search($query, $options);

        return $results-&gt;getHits();
    }

    /**
     * Bulk-imports existing records into the MeiliSearch index.
     */
    public static function importToMeilisearch(int $chunkSize = 500): void
    {
        $offset = 0;

        do {
            $records = static::filter(&quot;LIMIT $chunkSize OFFSET $offset&quot;);
            $data    = &#091;];

            foreach ($records as $record) {
                $data&#091;] = $record-&gt;toSearchArray();
            }

            if (!empty($data)) {
                self::getMeiliClient()
                    -&gt;index(static::searchableAs())
                    -&gt;addDocuments($data);
            }

            $offset += $chunkSize;
        } while (count($records) === $chunkSize);
    }
}
</code></pre>



<h2>Ventajas del Trait MeilisearchSearchable</h2>
<ul>
<li>
<p><strong>Integración simple</strong>: Reutiliza fácilmente la funcionalidad en múltiples modelos.</p>
</li>
<li>
<p><strong>Automatización</strong>: Mantiene sincronizados automáticamente tus modelos con el índice de búsqueda.</p>
</li>
<li>
<p><strong>Flexibilidad</strong>: Puedes personalizar fácilmente el comportamiento de búsqueda por cada modelo.</p>
</li>
<li><strong>Inteligencia Artificial:</strong> Soporte para búsqueda semántica mediante integración con IA (OpenAI u otros proveedores).</li>
</ul>
<h2 class="" data-start="3331" data-end="3432">Cómo utilizar en la práctica un buscador avanzado de texto completo para KumbiaPHP con Meilisearch</h2>



<h3 data-pm-slice="1 1 []">Paso 1: Implementación en Modelos</h3>
<p>A continuación, integra el trait en tus modelos que extiendan de LiteRecord:</p>
<h4>Ejemplo con Modelo Product</h4>



<pre class="wp-block-code language-php"><code class="" data-line="">&lt;?php

use Kumbia\ActiveRecord\LiteRecord;

class Product extends LiteRecord
{
    use MeilisearchSearchableTrait;

    protected static $table = &#039;products&#039;;

    protected function toSearchArray(): array
    {
        return &#091;
            &#039;id&#039; =&gt; $this-&gt;id,
            &#039;name&#039; =&gt; $this-&gt;name,
            &#039;description&#039; =&gt; $this-&gt;description,
            &#039;price&#039; =&gt; $this-&gt;price,
        ];
    }
}</code></pre>



<h4 data-pm-slice="1 1 []">Ejemplo con Modelo Article</h4>



<pre class="wp-block-code language-php"><code class="" data-line="">&lt;?php

use Kumbia\ActiveRecord\LiteRecord;

class Article extends LiteRecord
{
    use MeilisearchSearchableTrait;

    protected static $table = &#039;articles&#039;;

    protected function toSearchArray(): array
    {
        return &#091;
            &#039;id&#039; =&gt; $this-&gt;id,
            &#039;title&#039; =&gt; $this-&gt;title,
            &#039;content&#039; =&gt; $this-&gt;content,
            &#039;author&#039; =&gt; $this-&gt;author,
        ];
    }
}</code></pre>



<p data-pm-slice="1 1 []">Una vez implementado el trait en tus modelos, realizar búsquedas será simple y eficaz. Estos ejemplos prácticos ilustran claramente cómo aprovechar tu nuevo <strong data-start="3591" data-end="3661">buscador avanzado de texto completo para KumbiaPHP con Meilisearch</strong>.</p>
<h3 data-pm-slice="1 1 []">Paso 2: Realizar búsquedas fácilmente</h3>
<p>Ahora puedes realizar búsquedas en tus modelos:</p>



<pre class="wp-block-code language-php"><code class="" data-line="">// Buscar productos
$products = Product::search(&#039;zapatos deportivos&#039;, &#091;&#039;limit&#039; =&gt; 10]);

// Buscar artículos
$articles = Article::search(&#039;tecnología&#039;, &#091;&#039;limit&#039; =&gt; 5]);</code></pre>



<h3 data-pm-slice="1 1 []">Paso 3: Importar datos existentes</h3>
<p>Si ya tienes datos almacenados en tu base de datos, puedes importarlos fácilmente:</p>



<pre class="wp-block-code language-php"><code class="" data-line="">Product::importToMeilisearch();
Article::importToMeilisearch();</code></pre>



<h2 data-pm-slice="1 1 []">Ejemplo de Mielisearch con Controlador y Vista en KumbiaPHP</h2>
<h3>Paso 1: Crea el controlador</h3>
<p>Controlador: <em>app/controllers/products_controller.php</em></p>



<pre class="wp-block-code language-php"><code class="" data-line="">class ProductsController extends AppController
{
    public function search()
    {
        if (Input::hasPost(&#039;query&#039;)) {
            $this-&gt;results = Product::search(Input::post(&#039;query&#039;));
        }
    }
}</code></pre>



<h3 data-pm-slice="1 1 []">Paso 2: Crea la vista</h3>
<p data-pm-slice="1 1 []">Vista: <em>app/views/products/search.phtml</em></p>



<pre class="wp-block-code language-php"><code class="" data-line="">&lt;h1&gt;Buscar productos&lt;/h1&gt;

&lt;?php View::content(); ?&gt;

&lt;?= Form::open(); ?&gt;
    &lt;?= Form::text(&#039;query&#039;, &#039;placeholder=&quot;Buscar...&quot;&#039;) ?&gt;
    &lt;?= Form::submit(&#039;Buscar&#039;) ?&gt;
&lt;?= Form::close(); ?&gt;

&lt;?php if (empty($results) &amp;&amp; Input::post(&#039;query&#039;)): ?&gt;
    &lt;p&gt;No se encontraron resultados.&lt;/p&gt;
    &lt;?php return 1 ?&gt;
&lt;?php endif; ?&gt;

&lt;h2&gt;Resultados&lt;/h2&gt;
&lt;ul&gt;
    &lt;?php foreach ($results as $product): ?&gt;
        &lt;li&gt;
            &lt;strong&gt;&lt;?= h($product&#091;&#039;name&#039;]) ?&gt;&lt;/strong&gt;&lt;br&gt;
            &lt;?= h($product&#091;&#039;description&#039;]) ?&gt;&lt;br&gt;
            Precio: $&lt;?= h($product&#091;&#039;price&#039;]) ?&gt;
        &lt;/li&gt;
    &lt;?php endforeach; ?&gt;
&lt;/ul&gt;
</code></pre>



<p data-pm-slice="1 1 []">La combinación de KumbiaPHP con Meilisearch a través del trait MeilisearchSearchable te permite ofrecer una experiencia superior en búsquedas a tus usuarios. Con la posibilidad de usar IA para búsquedas semánticas, la calidad de los resultados se eleva aún más. La integración es simple, escalable y potente, haciendo que valga la pena el esfuerzo inicial.</p>
<p>¡Prueba esta integración y lleva tus búsquedas al siguiente nivel con KumbiaPHP y Meilisearch!</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2025/04/19/buscador-avanzado-texto-completo-kumbiaphp-meilisearch/">Buscador avanzado de texto completo para KumbiaPHP con Meilisearch</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kumbiaphp.com/blog/2025/04/19/buscador-avanzado-texto-completo-kumbiaphp-meilisearch/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2903</post-id>	</item>
		<item>
		<title>Optimizando la Renderización Condicional en Vistas de KumbiaPHP con return 1;</title>
		<link>https://kumbiaphp.com/blog/2024/10/14/optimizando-la-renderizacion-condicional-en-vistas-de-kumbiaphp-con-return-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=optimizando-la-renderizacion-condicional-en-vistas-de-kumbiaphp-con-return-1</link>
					<comments>https://kumbiaphp.com/blog/2024/10/14/optimizando-la-renderizacion-condicional-en-vistas-de-kumbiaphp-con-return-1/#comments</comments>
		
		<dc:creator><![CDATA[HenryStivens]]></dc:creator>
		<pubDate>Mon, 14 Oct 2024 16:52:23 +0000</pubDate>
				<category><![CDATA[Documentación]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[vistas]]></category>
		<guid isPermaLink="false">https://kumbiaphp.com/blog/?p=2823</guid>

					<description><![CDATA[<p>Aprende a optimizar la renderización condicional en vistas de KumbiaPHP usando return 1; para escribir código más limpio y eficiente sin bloques if-else innecesarios.</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2024/10/14/optimizando-la-renderizacion-condicional-en-vistas-de-kumbiaphp-con-return-1/">Optimizando la Renderización Condicional en Vistas de KumbiaPHP con return 1;</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">En el desarrollo web, especialmente al trabajar con motores de plantillas o frameworks MVC como <a href="https://kumbiaphp.com/blog/manuales-y-descargas/">KumbiaPHP</a>, es común <a href="https://github.com/KumbiaPHP/Documentation/blob/master/es/view.md">renderizar</a> condicionalmente partes de una vista basándose en la disponibilidad de datos. Tradicionalmente, los desarrolladores utilizan sentencias <em>if-else</em> para controlar el flujo de renderización de la vista. Sin embargo, el uso excesivo de bloques <em>if-else</em> puede desordenar tu código y dificultar su mantenimiento.</p>



<p class="wp-block-paragraph">En este artículo, exploraremos una forma más limpia y eficiente de gestionar la renderización condicional en KumbiaPHP con return 1;. También profundizaremos en por qué este enfoque es preferible sobre el uso estándar de <em>return;</em> o estructuras <em>if-else</em> anidadas.</p>



<span id="more-2823"></span>



<h2 class="wp-block-heading">El Enfoque Tradicional: Uso de <em>if-else</em></h2>



<p class="wp-block-paragraph">Considera un escenario donde quieres mostrar un mensaje si no hay datos para mostrar y renderizar el resto de la vista solo cuando los datos están disponibles. Un enfoque típico podría verse así:</p>



<pre class="wp-block-code language-php"><code class="" data-line="">&lt;?php if (!$products): ?&gt;
    &lt;h2&gt;No hay productos disponibles&lt;/h2&gt;
&lt;?php else: ?&gt;
    &lt;h1&gt;Lista de Productos&lt;/h1&gt;
    &lt;ul&gt;
        &lt;?php foreach ($products as $product): ?&gt;
            &lt;li&gt;
                &lt;h3&gt;&lt;?= $product-&gt;nombre ?&gt;&lt;/h3&gt;
                &lt;img src=&quot;&lt;?= $product-&gt;imagen_url ?&gt;&quot; alt=&quot;&lt;?= $product-&gt;nombre ?&gt;&quot; /&gt;
                &lt;p&gt;&lt;strong&gt;Categoría:&lt;/strong&gt; &lt;?= $product-&gt;categoria ?&gt;&lt;/p&gt;
                &lt;p&gt;&lt;strong&gt;Descripción:&lt;/strong&gt; &lt;?= $product-&gt;descripcion ?&gt;&lt;/p&gt;
                &lt;p&gt;&lt;strong&gt;Precio:&lt;/strong&gt; $&lt;?= number_format($product-&gt;precio, 2) ?&gt;&lt;/p&gt;
                &lt;p&gt;&lt;strong&gt;Stock:&lt;/strong&gt; &lt;?= $product-&gt;stock ?&gt; unidades disponibles&lt;/p&gt;
                &lt;p&gt;&lt;strong&gt;SKU:&lt;/strong&gt; &lt;?= $product-&gt;sku ?&gt;&lt;/p&gt;
                &lt;a href=&quot;/productos/&lt;?= $product-&gt;id ?&gt;&quot; class=&quot;btn&quot;&gt;Ver Detalles&lt;/a&gt;
            &lt;/li&gt;
        &lt;?php endforeach ?&gt;
    &lt;/ul&gt;
&lt;?php endif; ?&gt;
</code></pre>



<p class="wp-block-paragraph">Aunque esto funciona, envolver todo el código de la vista dentro de un bloque <em>else</em> añade una indentación y complejidad innecesarias, especialmente en vistas más grandes.</p>



<h2 class="wp-block-heading">Renderización condicional en KumbiaPHP con return 1; Una Solución Más Limpia:</h2>



<p class="wp-block-paragraph">Para mejorar la legibilidad y mantener el código más limpio, podemos utilizar <em>return 1</em>; para salir de la vista de manera anticipada si no hay datos. Aquí está cómo se vería el código:</p>



<pre class="wp-block-code language-php"><code class="" data-line="">&lt;?php if (!$products) {
    echo &quot;&lt;h2&gt;No hay productos disponibles&lt;/h2&gt;&quot;;
    //View::partial(&#039;sin-datos&#039;); // o enviamos un partial
    return 1;
}?&gt;

&lt;h1&gt;Lista de Productos&lt;/h1&gt;
&lt;ul&gt;
    &lt;?php foreach ($products as $product): ?&gt;
        &lt;li&gt;
            &lt;h3&gt;&lt;?= $product-&gt;nombre ?&gt;&lt;/h3&gt;
            &lt;img src=&quot;&lt;?= $product-&gt;imagen_url ?&gt;&quot; alt=&quot;&lt;?= $product-&gt;nombre ?&gt;&quot; /&gt;
            &lt;p&gt;&lt;strong&gt;Categoría:&lt;/strong&gt; &lt;?= $product-&gt;categoria ?&gt;&lt;/p&gt;
            &lt;p&gt;&lt;strong&gt;Descripción:&lt;/strong&gt; &lt;?= $product-&gt;descripcion ?&gt;&lt;/p&gt;
            &lt;p&gt;&lt;strong&gt;Precio:&lt;/strong&gt; $&lt;?= number_format($product-&gt;precio, 2) ?&gt;&lt;/p&gt;
            &lt;p&gt;&lt;strong&gt;Stock:&lt;/strong&gt; &lt;?= $product-&gt;stock ?&gt; unidades disponibles&lt;/p&gt;
            &lt;p&gt;&lt;strong&gt;SKU:&lt;/strong&gt; &lt;?= $product-&gt;sku ?&gt;&lt;/p&gt;
            &lt;p&gt;&lt;strong&gt;Fecha de Lanzamiento:&lt;/strong&gt; &lt;?= date(&#039;d/m/Y&#039;, strtotime($product-&gt;fecha_lanzamiento)) ?&gt;&lt;/p&gt;
            &lt;p&gt;&lt;strong&gt;Calificación:&lt;/strong&gt; &lt;?= $product-&gt;calificacion ?&gt; estrellas&lt;/p&gt;
            &lt;a href=&quot;/productos/&lt;?= $product-&gt;id ?&gt;&quot; class=&quot;btn&quot;&gt;Ver Detalles&lt;/a&gt;
        &lt;/li&gt;
    &lt;?php endforeach ?&gt;
&lt;/ul&gt;
</code></pre>



<p>En este ejemplo:</p>
<ul>
<li>Si <em>$products</em> está vacío o es <em>false</em>, se muestra el mensaje «No hay productos disponibles» y la ejecución de la vista se detiene gracias a <em>return 1;</em>.</li>
<li>Si <em>$products</em> tiene datos, el código continúa ejecutándose y se muestra la lista detallada de productos sin necesidad de un bloque <em>else</em>.</li>
<li>El código es más limpio y fácil de leer al eliminar la indentación adicional.</li>
</ul>



<h2 class="wp-block-heading">Aplicación en Templates y Partials</h2>



<p class="wp-block-paragraph">La misma técnica puede aplicarse en <strong>templates</strong> y <strong>partials</strong>. Esto es útil cuando necesitas condicionar la inclusión de ciertas secciones o elementos de la interfaz de usuario.</p>



<h3 class="wp-block-heading">Ejemplo en un Partial</h3>



<p class="wp-block-paragraph">En un partial que muestra comentarios de un artículo:</p>



<pre class="wp-block-code language-php"><code class="" data-line="">&lt;?php
if (!$comments) {
    echo &quot;&lt;p&gt;No hay comentarios aún. ¡Sé el primero en comentar!&lt;/p&gt;&quot;;
    return 1;
}?&gt;

&lt;div class=&quot;comments&quot;&gt;
    &lt;h3&gt;&lt;?= count($comments) ?&gt; Comentarios&lt;/h3&gt;
    &lt;?php foreach ($comments as $comment): ?&gt;
        &lt;div class=&quot;comment&quot;&gt;
            &lt;p&gt;&lt;strong&gt;&lt;?= $comment-&gt;autor ?&gt;&lt;/strong&gt; dice:&lt;/p&gt;
            &lt;p&gt;&lt;?= $comment-&gt;contenido ?&gt;&lt;/p&gt;
            &lt;p&gt;&lt;em&gt;Publicado el &lt;?= date(&#039;d/m/Y H:i&#039;, strtotime($comment-&gt;fecha_publicacion)) ?&gt;&lt;/em&gt;&lt;/p&gt;
        &lt;/div&gt;
    &lt;?php endforeach ?&gt;
&lt;/div&gt;
</code></pre>



<h2 class="wp-block-heading">Entendiendo <em>View::render()</em> y <em>include</em></h2>



<p class="wp-block-paragraph">En KumbiaPHP, las vistas se renderizan usando el método <em>View::render()</em>, que internamente incluye el archivo de vista:</p>



<pre class="wp-block-code language-php"><code class="" data-line="">// Carga la vista
if (!include self::getView()) {
    throw new KumbiaException(&#039;Vista &quot;&#039; . self::getPath() . &#039;&quot; no encontrada&#039;, &#039;no_view&#039;);
}</code></pre>



<p class="wp-block-paragraph">La sentencia <em>include</em> en PHP devuelve <em>false</em> si falla al cargar el archivo (debido a que el archivo no existe, falta de permisos, etc.). Si el archivo incluido ejecuta un <em>return;</em> sin un valor, devuelve <em>null</em>, lo que la validación del  <em>include</em> se interpreta como <em>false</em>. Esto lleva a que <em>View::render()</em> crea que el archivo de vista no pudo ser incluido y lanza una excepción.</p>



<h3 class="wp-block-heading">La Importancia de <em>return 1;</em></h3>



<p class="wp-block-paragraph">Al usar <em>return 1;</em>, la vista devuelve <em>1</em>, lo que <em>include</em> interpreta como una inclusión exitosa. Esto permite que el proceso de renderización continúe sin problemas sin desencadenar una excepción.</p>



<h2 class="wp-block-heading">Beneficios de Usar <em>return 1;</em></h2>



<ul class="wp-block-list">
<li><strong>Código Más Limpio</strong>: Al eliminar bloques <em>else</em> innecesarios, el código es más sencillo y legible.</li>



<li><strong>Facilidad de Mantenimiento</strong>: Menos indentaciones y anidaciones facilitan la comprensión y modificación del código en el futuro.</li>



<li><strong>Consistencia</strong>: Puedes aplicar esta técnica en vistas, templates y partials de manera uniforme.</li>



<li><strong>Mayor Claridad</strong>: Separar la lógica de control del contenido principal mejora la claridad y organización del código.</li>
</ul>



<h2 class="wp-block-heading">Conclusión</h2>



<p class="wp-block-paragraph">Usar <em>return 1;</em> en las vistas de KumbiaPHP es una forma simple pero efectiva de gestionar la renderización condicional sin complicar tu código con estructuras <em>if-else</em> innecesarias. Asegura que tus vistas se ejecuten sin problemas y que el proceso de renderización continúe sin excepciones.</p>



<p class="wp-block-paragraph">Al adoptar este enfoque, puedes escribir vistas más limpias y mantenibles en tus aplicaciones KumbiaPHP. Pruébalo en tu próximo proyecto y experimenta la diferencia que hace en tu base de código.</p>



<p class="wp-block-paragraph"><em>¡Feliz codificación con KumbiaPHP!</em></p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2024/10/14/optimizando-la-renderizacion-condicional-en-vistas-de-kumbiaphp-con-return-1/">Optimizando la Renderización Condicional en Vistas de KumbiaPHP con return 1;</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kumbiaphp.com/blog/2024/10/14/optimizando-la-renderizacion-condicional-en-vistas-de-kumbiaphp-con-return-1/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2823</post-id>	</item>
		<item>
		<title>KumbiaPHP 1.2 optimizado para PHP 8: código simplificado y mayor velocidad</title>
		<link>https://kumbiaphp.com/blog/2024/09/26/kumbiaphp-1-2-optimizado-para-php-8-codigo-simplificado-y-mayor-velocidad/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=kumbiaphp-1-2-optimizado-para-php-8-codigo-simplificado-y-mayor-velocidad</link>
					<comments>https://kumbiaphp.com/blog/2024/09/26/kumbiaphp-1-2-optimizado-para-php-8-codigo-simplificado-y-mayor-velocidad/#comments</comments>
		
		<dc:creator><![CDATA[HenryStivens]]></dc:creator>
		<pubDate>Thu, 26 Sep 2024 18:26:42 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[noticias]]></category>
		<category><![CDATA[php8]]></category>
		<guid isPermaLink="false">https://kumbiaphp.com/blog/?p=2802</guid>

					<description><![CDATA[<p>La entrada <a href="https://kumbiaphp.com/blog/2024/09/26/kumbiaphp-1-2-optimizado-para-php-8-codigo-simplificado-y-mayor-velocidad/">KumbiaPHP 1.2 optimizado para PHP 8: código simplificado y mayor velocidad</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Estamos emocionados de anunciar el lanzamiento de la <a href="https://github.com/KumbiaPHP/KumbiaPHP/releases/tag/v1.2.1" target="_blank" rel="noopener">versión 1.2 de KumbiaPHP</a> (Disponible desde el 11 de marzo del año en curso), una actualización que marca un hito significativo en la evolución de nuestro framework. <strong>KumbiaPHP 1.2 optimizado para </strong><a href="https://www.php.net/releases/8.0/es.php" target="_blank" rel="noopener">PHP 8</a> trae consigo mejoras en el rendimiento y la eficiencia, ya que aprovecha al máximo las capacidades de PHP 8, llevando tu desarrollo al siguiente nivel.</p>



<h2>KumbiaPHP 1.2 optimizado para PHP 8: Adopción total y ventajas</h2>
<p>Una de las principales novedades de <strong>KumbiaPHP 1.2</strong> es su completa compatibilidad con PHP 8. Si ya estás utilizando PHP 8 o tienes planes de actualizarte pronto, esta versión de KumbiaPHP es esencial para ti. PHP 8 introduce una serie de mejoras y nuevas características que permiten escribir código más limpio, eficiente y moderno. Al adoptar estas innovaciones, hemos optimizado el núcleo de KumbiaPHP, logrando una reducción significativa en las líneas de código.</p>



<span id="more-2802"></span>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://kumbiaphp.com/blog/wp-content/uploads/2024/07/kumbia-php-8-1.jpg"><img loading="lazy" decoding="async" width="750" height="282" src="https://kumbiaphp.com/blog/wp-content/uploads/2024/07/kumbia-php-8-1.jpg" alt="" class="wp-image-2811" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2024/07/kumbia-php-8-1.jpg 750w, https://kumbiaphp.com/blog/wp-content/uploads/2024/07/kumbia-php-8-1-300x113.jpg 300w" sizes="auto, (max-width: 750px) 100vw, 750px" /></a></figure>
</div>


<h2>Un núcleo más ligero y rápido</h2>
<p>Gracias a las nuevas características de PHP 8, hemos logrado simplificar y reducir el núcleo de KumbiaPHP. Esto se traduce en menos líneas de código, y lo convierte en un framework aún más rápido y eficiente. Menos código significa menos posibilidades de errores y un rendimiento mejorado, lo cual es crucial para el desarrollo de aplicaciones modernas y escalables.</p>
<h2>Todo funciona igual, pero de forma más eficiente</h2>
<p>Sabemos lo importante que es la estabilidad y la compatibilidad para nuestros usuarios. Por eso, aunque hemos realizado cambios significativos en el núcleo, el funcionamiento general de KumbiaPHP sigue siendo el mismo. Puedes actualizar a la versión 1.2 con la confianza de que tu aplicación continuará funcionando como antes, pero con las mejoras en rendimiento y eficiencia que PHP 8 ofrece.</p>
<h2>Futuras actualizaciones y nuevas librerías</h2>
<p>La versión 1.2 de KumbiaPHP es sólo el comienzo. En las próximas versiones menores, continuaremos aprovechando las ventajas de PHP 8, incorporando nuevas librerías y actualizaciones que enriquecerán nuestro framework. Estamos comprometidos en mantener a KumbiaPHP a la vanguardia de la tecnología, proporcionando a nuestros usuarios las herramientas necesarias para desarrollar aplicaciones robustas y eficientes.</p>
<h2>Recomendación adicional</h2>
<p>Dado que PHP 8.0 cumplió su ciclo de vida, sería recomendable ir adaptándose a las versiones más modernas que actualmente tienen soporte activo como la 8.2 y 8.3.</p>
<h2>¿Por qué actualizar a KumbiaPHP 1.2?</h2>
<ul>
<li><strong>Compatibilidad Total con PHP 8:</strong> Aprovecha todas las mejoras y nuevas características de PHP 8.</li>
<li><strong>Menos Código, Más Eficiencia:</strong> Un núcleo más ligero que mejora el rendimiento de tu aplicación.</li>
<li><strong>Estabilidad Garantizada:</strong> Continúa desarrollando con la tranquilidad de que todo funciona igual.</li>
<li><strong>Futuras Mejoras:</strong> Nuevas librerías y actualizaciones que seguirán optimizando tu experiencia de desarrollo.</li>
</ul>
<p>¡Actualiza hoy mismo a <strong>KumbiaPHP 1.2 optimizado para PHP 8</strong> y lleva tu desarrollo al siguiente nivel!</p>





<p> </p>
<p> </p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2024/09/26/kumbiaphp-1-2-optimizado-para-php-8-codigo-simplificado-y-mayor-velocidad/">KumbiaPHP 1.2 optimizado para PHP 8: código simplificado y mayor velocidad</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kumbiaphp.com/blog/2024/09/26/kumbiaphp-1-2-optimizado-para-php-8-codigo-simplificado-y-mayor-velocidad/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2802</post-id>	</item>
		<item>
		<title>KumbiaPHP Live #10</title>
		<link>https://kumbiaphp.com/blog/2020/10/15/kumbiaphp-live-10/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=kumbiaphp-live-10</link>
					<comments>https://kumbiaphp.com/blog/2020/10/15/kumbiaphp-live-10/#respond</comments>
		
		<dc:creator><![CDATA[HenryStivens]]></dc:creator>
		<pubDate>Thu, 15 Oct 2020 04:00:58 +0000</pubDate>
				<category><![CDATA[Lives]]></category>
		<guid isPermaLink="false">https://kumbiaphp.com/blog/?p=2568</guid>

					<description><![CDATA[<p>La entrada <a href="https://kumbiaphp.com/blog/2020/10/15/kumbiaphp-live-10/">KumbiaPHP Live #10</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Las últimas noticias del mes de septiembre sobre el framework.</p>
<figure style="text-align: center;"><iframe loading="lazy" src="https://www.youtube.com/embed/10vAUC_IWUg" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" width="560" height="315" frameborder="0"></iframe></figure>
<p>Aquí pueden ver las <a href="https://www.youtube.com/playlist?list=PLryxHhRnr3164wRTybubUXT6R-gXCrI9f">transmisiones anteriores</a>.</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2020/10/15/kumbiaphp-live-10/">KumbiaPHP Live #10</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kumbiaphp.com/blog/2020/10/15/kumbiaphp-live-10/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2568</post-id>	</item>
		<item>
		<title>KumbiaPHP Live #9</title>
		<link>https://kumbiaphp.com/blog/2020/09/16/kumbiaphp-live-9/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=kumbiaphp-live-9</link>
					<comments>https://kumbiaphp.com/blog/2020/09/16/kumbiaphp-live-9/#respond</comments>
		
		<dc:creator><![CDATA[HenryStivens]]></dc:creator>
		<pubDate>Wed, 16 Sep 2020 03:23:00 +0000</pubDate>
				<category><![CDATA[Lives]]></category>
		<guid isPermaLink="false">https://kumbiaphp.com/blog/?p=2558</guid>

					<description><![CDATA[<p>La entrada <a href="https://kumbiaphp.com/blog/2020/09/16/kumbiaphp-live-9/">KumbiaPHP Live #9</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Las últimas noticias del mes de agost sobre el framework.</p>
<figure style="text-align: center;"><iframe loading="lazy" src="https://www.youtube.com/embed/GNUugU2whv0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" width="560" height="315" frameborder="0"></iframe></figure>
<p>Aquí pueden ver las <a href="https://www.youtube.com/playlist?list=PLryxHhRnr3164wRTybubUXT6R-gXCrI9f">transmisiones anteriores</a>.</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2020/09/16/kumbiaphp-live-9/">KumbiaPHP Live #9</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kumbiaphp.com/blog/2020/09/16/kumbiaphp-live-9/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2558</post-id>	</item>
	</channel>
</rss>
