<?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>PHP archivos - KumbiaPHP Framework PHP en español</title>
	<atom:link href="https://kumbiaphp.com/blog/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>https://kumbiaphp.com/blog/category/php/</link>
	<description>Web &#38; app MVC PHP framework</description>
	<lastBuildDate>Thu, 06 Nov 2025 22:50:16 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://kumbiaphp.com/blog/wp-content/uploads/2016/01/250-150x150.png</url>
	<title>PHP archivos - KumbiaPHP Framework PHP en español</title>
	<link>https://kumbiaphp.com/blog/category/php/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">123854898</site>	<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>&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>&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>&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>// 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>Mejora en la configuración de errores en KumbiaPHP: Nueva funcionalidad Exception para entornos de producción</title>
		<link>https://kumbiaphp.com/blog/2024/09/30/mejora-en-la-configuracion-de-errores-en-kumbiaphp-nueva-funcionalidad-de-exception-para-entornos-de-produccion/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mejora-en-la-configuracion-de-errores-en-kumbiaphp-nueva-funcionalidad-de-exception-para-entornos-de-produccion</link>
					<comments>https://kumbiaphp.com/blog/2024/09/30/mejora-en-la-configuracion-de-errores-en-kumbiaphp-nueva-funcionalidad-de-exception-para-entornos-de-produccion/#comments</comments>
		
		<dc:creator><![CDATA[Nelson Rojas]]></dc:creator>
		<pubDate>Mon, 30 Sep 2024 13:33:59 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[buenas prácticas]]></category>
		<category><![CDATA[noticias]]></category>
		<guid isPermaLink="false">https://kumbiaphp.com/blog/?p=2851</guid>

					<description><![CDATA[<p>La entrada <a href="https://kumbiaphp.com/blog/2024/09/30/mejora-en-la-configuracion-de-errores-en-kumbiaphp-nueva-funcionalidad-de-exception-para-entornos-de-produccion/">Mejora en la configuración de errores en KumbiaPHP: Nueva funcionalidad Exception para entornos de producción</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Es común que al desplegar aplicaciones, los desarrolladores olviden cambiar el flag PRODUCTION a <strong>true</strong>, lo que puede dejar expuesta información sensible a los usuarios finales. En este artículo, abordaremos la nueva funcionalidad implementada en KumbiaPHP para mitigar este riesgo, proporcionando una capa adicional de seguridad a través de la configuración <strong>Exception</strong>.</p>



<p><span id="more-2851"></span></p>



<h2>El problema de dejar PRODUCTION en false:</h2>



<p>De manera predeterminada, KumbiaPHP expone la información detallada de cualquier tipo de excepción, a modo de permitirle al desarrollador revisar y entender dónde debe realizar mejoras. El problema es que si se olvida de cambiar el flag de PRODUCCION y lo deja en su valor inicial (false) cuando los usuarios finales realicen alguna operación indebida, o exista algún fallo no previsto en el servidor, por ejemplo con el acceso a la base de datos o al sistema de archivo, Kumbia no tendrá contexto de que se trata de una aplicación en producción y expondrá todos los detalles.</p>



<h2>La nueva configuración Exception: </h2>



<p>La nueva funcionalidad, de forma definitiva, <strong>evita exponer</strong> información de excepciones, lo cual es un alivio tanto para los desarrolladores como para los clientes. Para permitir la visualización de excepciones se ha agregado un nuevo archivo llamado <strong>exception.php</strong>. En su contenido se pueden definir las direcciones IP que tendrán permiso para recibir los detalles entregados por KumbiaPHP tanto en desarrollo como en entorno productivo.</p>
<p><a href="https://kumbiaphp.com/blog/wp-content/uploads/2024/09/Screen-Shot-2024-09-26-at-10.14.54.png"><img fetchpriority="high" decoding="async" class="alignnone wp-image-2853 size-full" src="https://kumbiaphp.com/blog/wp-content/uploads/2024/09/Screen-Shot-2024-09-26-at-10.14.54.png" alt="" width="616" height="194" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2024/09/Screen-Shot-2024-09-26-at-10.14.54.png 616w, https://kumbiaphp.com/blog/wp-content/uploads/2024/09/Screen-Shot-2024-09-26-at-10.14.54-300x94.png 300w" sizes="(max-width: 616px) 100vw, 616px" /></a></p>



<h2>Ventajas de la nueva funcionalidad</h2>



<p>Dentro de las ventajas que se obtienen con esta nueva mejora podemos mencionar las siguientes:</p>
<ul>
<li>Seguridad: evita la exposición accidental de información sensible.</li>
<li><strong>Control</strong>: permite que sólo los desarrolladores o administradores puedan acceder a los detalles de los errores.</li>
<li>Fácil configuración: los usuarios solo necesitan añadir las IPs de confianza.</li>
</ul>
<h2>Cómo implementar la nueva funcionalidad:</h2>



<p>Para implementar la nueva funcionalida necesitamos seguir los siguientes pasos:</p>
<ol>
<li>Configurar las direcciones IP en el archivo <strong>exception.php</strong>.</li>
<li>Comprobar que los errores solo son visibles desde las IPs configuradas.</li>
</ol>
<h2>Caché:</h2>
<p>Desde esta nueva funcionalidad, el flag PRODUCTION asignado con el valor <strong>true</strong>, sólo será reponsable de habilitar el uso de la caché para el sitio web.</p>
<h2>Recordatorio:</h2>
<p>Nunca está demás dejar un recordatorio extra: aunque estés en modo desarrollo, si no se incluyen las direcciones IP dentro del archivo <strong>exception.php</strong> verán únicamente el error clásico, sin todos los detalles. Por lo tanto, <strong>no se olviden</strong> de agregar su propia dirección dentro de la nueva configuración.</p>
<h2>Conclusión:</h2>



<p>La nueva configuración de <strong>Exception</strong> en KumbiaPHP es un gran paso hacia la seguridad en entornos de producción, permitiendo que sólo quienes están autorizados puedan ver los detalles de los errores. Este tipo de mejoras no sólo protegen nuestras aplicaciones, sino que también promueven buenas prácticas en el desarrollo. De todos modos, el equipo está trabajando en <strong>agregar funcionalidades</strong> para esta nueva característica, así que no te pierdas las próximas mejoras que publicaremos también en nuestro blog.</p>
<p>Mucho ánimo a todos en nuestra comunidad, y como siempre les decimos&#8230; ¡larga vida a KumbiaPHP!</p>
<p>¡Un abrazo!</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2024/09/30/mejora-en-la-configuracion-de-errores-en-kumbiaphp-nueva-funcionalidad-de-exception-para-entornos-de-produccion/">Mejora en la configuración de errores en KumbiaPHP: Nueva funcionalidad Exception para entornos de producción</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/30/mejora-en-la-configuracion-de-errores-en-kumbiaphp-nueva-funcionalidad-de-exception-para-entornos-de-produccion/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2851</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 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="(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>Compartir el core para diferentes aplicaciones</title>
		<link>https://kumbiaphp.com/blog/2020/08/05/compartir-el-core-para-diferentes-aplicaciones/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=compartir-el-core-para-diferentes-aplicaciones</link>
					<comments>https://kumbiaphp.com/blog/2020/08/05/compartir-el-core-para-diferentes-aplicaciones/#respond</comments>
		
		<dc:creator><![CDATA[HenryStivens]]></dc:creator>
		<pubDate>Wed, 05 Aug 2020 04:00:15 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriales y screencast]]></category>
		<category><![CDATA[core]]></category>
		<guid isPermaLink="false">https://kumbiaphp.com/blog/?p=2527</guid>

					<description><![CDATA[<p>Este el tercer video donde mostramos una característca opcional que podemos usar al crear o desplegar nuestras aplicaciones Compartir&#8230;</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2020/08/05/compartir-el-core-para-diferentes-aplicaciones/">Compartir el core para diferentes aplicaciones</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Este el tercer video donde mostramos una característca opcional que podemos usar al crear o desplegar nuestras aplicaciones</p>
<figure style="text-align: center;"><iframe src="https://www.youtube.com/embed/E2oh8YiV8Zg" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe><figcaption>Compartir el core de KumbiaPHP</figcaption></figure>
<p>La entrada <a href="https://kumbiaphp.com/blog/2020/08/05/compartir-el-core-para-diferentes-aplicaciones/">Compartir el core para diferentes aplicaciones</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/08/05/compartir-el-core-para-diferentes-aplicaciones/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2527</post-id>	</item>
		<item>
		<title>Instalación de XAMPP y configuración de VirtualHost</title>
		<link>https://kumbiaphp.com/blog/2020/08/04/instalacion-de-xampp-y-configuracion-de-virtualhost/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=instalacion-de-xampp-y-configuracion-de-virtualhost</link>
					<comments>https://kumbiaphp.com/blog/2020/08/04/instalacion-de-xampp-y-configuracion-de-virtualhost/#respond</comments>
		
		<dc:creator><![CDATA[HenryStivens]]></dc:creator>
		<pubDate>Tue, 04 Aug 2020 11:42:44 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriales y screencast]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[Virtua Host]]></category>
		<category><![CDATA[xampp]]></category>
		<guid isPermaLink="false">https://kumbiaphp.com/blog/?p=2511</guid>

					<description><![CDATA[<p>Instalar KumbiaPHP en Windows usando XAMPP Configurar virtual host en XAMPP para KumbiaPHP</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2020/08/04/instalacion-de-xampp-y-configuracion-de-virtualhost/">Instalación de XAMPP y configuración de VirtualHost</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Dos nuevos videos publicamos esta semana para iniciarnos en el mundo de KumbiaPHP, el primer video trata sobre la&#8230;</p>
<h2>Instalación de KumbiaPHP usando XAMPP en Windows</h2>


<figure style="text-align: center;"><iframe loading="lazy" src="https://www.youtube.com/embed/6urWXloT-so" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe>
<figcaption>Instalar KumbiaPHP en Windows usando XAMPP</figcaption>
</figure>


<p>El segundo video trata sobre la&#8230;</p>
<h2>Configuración de virtual host en Apache para usarlo con KumbiaPHP</h2>


<figure style="text-align: center;"><iframe loading="lazy" src="https://www.youtube.com/embed/ucvLTi2R660" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe>
<figcaption>Configurar virtual host en XAMPP para KumbiaPHP</figcaption>
</figure>

<p>La entrada <a href="https://kumbiaphp.com/blog/2020/08/04/instalacion-de-xampp-y-configuracion-de-virtualhost/">Instalación de XAMPP y configuración de VirtualHost</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/08/04/instalacion-de-xampp-y-configuracion-de-virtualhost/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2511</post-id>	</item>
		<item>
		<title>Servidor PHP desde la consola Linux de Windows</title>
		<link>https://kumbiaphp.com/blog/2020/03/04/servidor-php-desde-la-consola-linux-de-windows/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=servidor-php-desde-la-consola-linux-de-windows</link>
					<comments>https://kumbiaphp.com/blog/2020/03/04/servidor-php-desde-la-consola-linux-de-windows/#comments</comments>
		
		<dc:creator><![CDATA[Nelson Rojas]]></dc:creator>
		<pubDate>Wed, 04 Mar 2020 10:50:11 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriales y screencast]]></category>
		<category><![CDATA[servidor php]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[wsl]]></category>
		<guid isPermaLink="false">https://www.kumbiaphp.com/blog/?p=2276</guid>

					<description><![CDATA[<p>Crear usuario y contraseña de la consola de linux Servidor PHP local</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2020/03/04/servidor-php-desde-la-consola-linux-de-windows/">Servidor PHP desde la consola Linux de Windows</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>En esta ocasión vamos a hablar de la característica de <strong><em>Windows 10</em> que nos permite contar con nuestro servidor PHP desde la consola Linux</strong>, y cómo hacer uso de <em>KumbiaPHP</em> con los requerimientos mínimos para dicha consola.&nbsp;</p>
<p>Tendremos un <strong>servidor local de PHP</strong> perfecto para desarrollo, <strong>sin usar WAMP o XAMPP server</strong>.</p>
<p>Antes de comenzar, te dejamos un enlace donde se explican las implicancias del <em>WSL</em> (Windows Subsystem for Linux) <a href="https://es.wikipedia.org/wiki/Windows_Subsystem_for_Linux" target="_blank" rel="noopener noreferrer">https://es.wikipedia.org/wiki/Windows_Subsystem_for_Linux</a></p>
<p>Vamos con los requisitos. Lo primero que necesitamos es habilitar la caracterísca de <em>Subsistema Linux desde Windows</em>.<span id="more-2276"></span></p>
<h2>Instalar WSL en Windows 10</h2>
<p>Para ello hacemos clic en inicio y escribimos <code>&lt;em&gt;Características de Windows&lt;/em&gt;</code> (en mi caso se verá diferente porque llevo una versión de <em>Windows</em> en inglés)</p>
<p>&nbsp;</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="835" height="677" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/02/00.png" alt="" class="wp-image-2277" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/02/00.png 835w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/00-300x243.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/00-768x623.png 768w" sizes="auto, (max-width: 835px) 100vw, 835px" /></figure>



<p>Luego buscaremos al final de la lista el <em>Subsistema Linux para Windows</em> (ver imagen siguiente)</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="416" height="369" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/02/02.png" alt="" class="wp-image-2278" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/02/02.png 416w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/02-300x266.png 300w" sizes="auto, (max-width: 416px) 100vw, 416px" /></figure>



<p>Lo seleccionamos haciendo clic en la casilla de la izquierda, y finalizamos picando en el botón OK para que los cambios sean aplicados.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="656" height="482" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/02/03.png" alt="" class="wp-image-2279" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/02/03.png 656w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/03-300x220.png 300w" sizes="auto, (max-width: 656px) 100vw, 656px" /></figure>



<p>Tendremos que reiniciar para que la configuración se vea actualizada.</p>
<h2>Seleccionar la distribución de Linux en la Tienda de Microsoft</h2>
<p>Una vez hecho eso, iniciaremos a la aplicación <em>Tienda de Microsoft</em> (<em>Microsoft Store</em>) y usando su buscador, escribiremos la palabra <em>linux</em>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="804" height="633" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/02/05.png" alt="" class="wp-image-2280" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/02/05.png 804w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/05-300x236.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/05-768x605.png 768w" sizes="auto, (max-width: 804px) 100vw, 804px" /></figure>



<p>La lista de opciones es variada pues se cuenta con <strong><em>Ubuntu</em>, <em>Kali</em>, <em>Debian</em>, <em>OpenSuse</em>, entre otros</strong>. Para cuestiones de demostración he seleccionado la opción Debian (aunque en otra máquina lo he probado con <em>Ubuntu</em> 18.04).</p>
<p>Bastará con seleccionar la opción de vuestro gusto, y luego presionar el botón Obtener (Get en mi caso)</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="807" height="640" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/02/06.png" alt="" class="wp-image-2281" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/02/06.png 807w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/06-300x238.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/06-768x609.png 768w" sizes="auto, (max-width: 807px) 100vw, 807px" /></figure>



<p>Puede que el instalador te pregunte, si quieres mantener sincronizadas tus máquinas de acuerdo a tu cuenta. En mi caso, prefiero que sólo sea instalado en esta máquina, sin importar la sincronización posterior (para ello te requerirá iniciar sesión con una cuenta de <em>Windows Live</em> &#8211; <em>Hotmail</em>, <em>Outlook</em> u otra)</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="510" height="176" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/02/07.png" alt="" class="wp-image-2282" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/02/07.png 510w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/07-300x104.png 300w" sizes="auto, (max-width: 510px) 100vw, 510px" /></figure>



<p>En este diálogo he seleccionado «No, gracias». Luego de la respuesta, ha comenzado el proceso de instalación.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="802" height="633" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/02/09.png" alt="" class="wp-image-2283" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/02/09.png 802w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/09-300x237.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/09-768x606.png 768w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>





<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="802" height="631" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/02/10.png" alt="" class="wp-image-2284" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/02/10.png 802w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/10-300x236.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/10-768x604.png 768w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="979" height="514" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/02/11.png" alt="" class="wp-image-2285" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/02/11.png 979w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/11-300x158.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/11-768x403.png 768w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/11-940x494.png 940w" sizes="auto, (max-width: 979px) 100vw, 979px" /></figure>



<h2 class="wp-block-heading">Crear usuario y contraseña de la consola de linux</h2>



<p>Cuando la configuración de la <em>consola linux</em> haya finalizado, nos pedirá crear un usuario con nombre y contraseña.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="890" height="272" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/02/13.png" alt="" class="wp-image-2286" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/02/13.png 890w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/13-300x92.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/13-768x235.png 768w" sizes="auto, (max-width: 890px) 100vw, 890px" /></figure>



<p>Noten que el nombre de usuario de la consola, <strong>no tiene por qué coincidir con el nombre de usuario de la máquina de <em>Windows</em></strong>. Una vez creado el usuario habremos finalizado la instalación de la <em>consola de Linux</em>!</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="826" height="333" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/02/14.png" alt="" class="wp-image-2287" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/02/14.png 826w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/14-300x121.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/14-768x310.png 768w" sizes="auto, (max-width: 826px) 100vw, 826px" /></figure>



<p>Entonces ya tenemos nuestra estación Linux completamente funcional.&nbsp;</p>
<h2>Actualizar paquetes de Linux</h2>
<p>En los derivados de <em>Debian</em> (como <em>Ubuntu</em> y <em>Kali</em>) les recomiendo comenzar ejecutando el comando:</p>
<pre class="  language-bash"><code class="  language-bash">&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; update</code></pre>
<p>Con ello cargarás los repositorios de paquetes que podrás usar posteriormente.</p>
<h2>Instalar PHP y MariaDB (MySql) en la consola Linux de Windows</h2>
<p>Para usar <em>Debian</em> y derivados, con los requerimientos mínimos de desarrollo kumbiero necesitamos hacer la siguiente instalación</p>
<pre class="  language-bash"><code class="  language-bash">&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; php php-cli php-mysql mariadb-server php-mbstring &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;wget&lt;/span&gt; unzip</code></pre>
<h2>Instalar KumbiaPHP framework</h2>
<p>Una vez que hemos finalizado la instalación, podemos hacer una prueba descargando la versión de <em>KumbiaPHP</em> desde la <a href="http://www.kumbiaphp.com" target="_blank" rel="noopener noreferrer">página principal del proyecto</a></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="312" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/03/31-1024x312.png" alt="" class="wp-image-2358" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/03/31-1024x312.png 1024w, https://kumbiaphp.com/blog/wp-content/uploads/2020/03/31-300x91.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2020/03/31-768x234.png 768w, https://kumbiaphp.com/blog/wp-content/uploads/2020/03/31-940x286.png 940w, https://kumbiaphp.com/blog/wp-content/uploads/2020/03/31.png 1363w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Lo hacemos desde el icono de descarga para el formato tar. Hacemos clic con el botón secundario (normalmente el derecho) y copiamos el link desde el botón Copiar enlace (Copy link)</p>
<p>Luego desde la consola escribimos wget y pegamos lo que tenemos en el portapaleles. Deberíamos lograr una línea de ejecución como la siguiente:</p>
<pre class="  language-bash"><code class="  language-bash">&lt;span class=&quot;token function&quot;&gt;wget&lt;/span&gt; https://github.com/KumbiaPHP/KumbiaPHP/archive/v1.0.0.tar.gz</code></pre>
<p>&nbsp;</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="982" height="437" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/03/33.png" alt="" class="wp-image-2362" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/03/33.png 982w, https://kumbiaphp.com/blog/wp-content/uploads/2020/03/33-300x134.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2020/03/33-768x342.png 768w, https://kumbiaphp.com/blog/wp-content/uploads/2020/03/33-940x418.png 940w" sizes="auto, (max-width: 982px) 100vw, 982px" /></figure>



<p>Descomprimimos la descarga:</p>
<pre class="  language-bash"><code class="  language-bash">&lt;span class=&quot;token function&quot;&gt;tar&lt;/span&gt; xvfz v1.0.0.tar.gz</code></pre>
<p>Y renombramos la carpeta resultante con un nombre que tenga relación con el trabajo que llevaremos a cabo (usando el comando <code>mv</code>)</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="579" height="171" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/03/35.png" alt="" class="wp-image-2361" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/03/35.png 579w, https://kumbiaphp.com/blog/wp-content/uploads/2020/03/35-300x89.png 300w" sizes="auto, (max-width: 579px) 100vw, 579px" /></figure>



<p>Finalizamos la prueba de instalación entrando en la carpeta que hemos creado hasta llegar a <code>&lt;strong&gt;default/app&lt;/strong&gt;</code></p>
<p>&nbsp;</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="455" height="89" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/02/22.png" alt="" class="wp-image-2291" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/02/22.png 455w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/22-300x59.png 300w" sizes="auto, (max-width: 455px) 100vw, 455px" /></figure>



<h2 class="wp-block-heading">Servidor PHP local</h2>



<p>Sin instalar Apache o Nginx,&nbsp; escribiendo el comando:</p>
<pre class=" language-bash"><code class=" language-bash">bin/phpserver</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="957" height="642" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/02/23.png" alt="" class="wp-image-2292" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/02/23.png 957w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/23-300x201.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/23-768x515.png 768w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/23-940x631.png 940w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/23-440x294.png 440w" sizes="auto, (max-width: 957px) 100vw, 957px" /></figure>



<p><em>Windows</em> nos preguntará, si acaso queremos permitir conexiones desde redes internas o desde fuera de la red. Para efectos de prueba he seleccionado ambas opciones y he presionado el botón «Permitir acceso» (Allow access)</p>
<p>Entonces, nuestra aplicación recién instalada de KumbiaPHP estará disponible desde la dirección http://0.0.0.0:8001. En caso que no resulte también puedes invocarla usando la url de http://localhost:8001, o usando http://127.0.0.1:8001, o incluso la dirección ip interna de tu máquina como por ejemplo http://192.168.1.101:8001. Esta última opción nos servirá para hacer pruebas desde otros dispositivos conectados a la misma red (por ejemplo desde un tablet, o un móvil)</p>
<p>&nbsp;</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="474" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/02/25-1024x474.png" alt="" class="wp-image-2293" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/02/25-1024x474.png 1024w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/25-300x139.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/25-768x355.png 768w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/25-940x435.png 940w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/25.png 1366w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2>Permisos de la base de datos (Mysql, MariaDB, Postresql, otros)</h2>
<p>Un dato final, es si usamos MySQL o MariaDB o Postgresql, Windows nos preguntará si queremos dar acceso a dichos servicios, tal como ha hecho cuando hemos lanzado <code>&lt;strong&gt;bin/phpserver&lt;/strong&gt;</code>. En dicho caso sólo les recomiendo habilitar el uso en el equipo y la red local. No para el exterior. Aunque esta es una decisión que debe tomar cada uno.</p>
<p><strong>¿Y qué hemos ganado con lanzar KumbiaPHP con el comando bin/phpserver?</strong></p>
<p>Pues la ventana en la que lo hemos lanzado, se ha convertido en una ventana de log de utilización, por la que veremos cada una de las acciones que realice el framework mientras estamos trabajando con él</p>
<p>Y lo más importante, también <strong>veremos los errores al instante, para depurar más rápidamente nuestas aplicaciones</strong>.</p>
<p>&nbsp;</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="632" height="273" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/02/27.png" alt="" class="wp-image-2295" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/02/27.png 632w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/27-300x130.png 300w" sizes="auto, (max-width: 632px) 100vw, 632px" /></figure>



<p>Y hasta aquí nuestra publicación :-)</p>
<p>Esperamos que les sea de utilidad y que con ello tengan nuevas opciones de disfrutar programando con el <a href="https://www.kumbiaphp.com/blog/about/">framework más rápido</a> del oeste!</p>
<p>Saludos a todos nuestros colegas kumbieros!</p>
<p><strong>Post data: si eres nuevo por aquí te recomendamos ver algunos de nuestros posts para los recién llegados:</strong></p>
<p>KumbiaPHP essentials</p>
<p><a href="https://www.kumbiaphp.com/blog/2016/05/26/kumbiaphp-essentials/"><img loading="lazy" decoding="async" class="alignnone size-medium" src="https://i.vimeocdn.com/video/572670979.jpg?mw=800&amp;mh=449" alt="KumbiaPHP introducción" width="799" height="449" /></a></p>
<p>Scaffolding con KumbiaPHP</p>
<p><a href="https://www.kumbiaphp.com/blog/2017/04/03/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte/"><img loading="lazy" decoding="async" class="alignnone wp-image-2300 size-large" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/02/scaffolding-1024x576.jpg" alt="Scaffolding con KumbiaPHP" width="940" height="529" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/02/scaffolding-1024x576.jpg 1024w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/scaffolding-300x169.jpg 300w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/scaffolding-768x432.jpg 768w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/scaffolding-940x529.jpg 940w, https://kumbiaphp.com/blog/wp-content/uploads/2020/02/scaffolding.jpg 1058w" sizes="auto, (max-width: 940px) 100vw, 940px" /></a></p>
<p>Dicho esto,</p>
<p>Larga vida a KumbiaPHP!</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2020/03/04/servidor-php-desde-la-consola-linux-de-windows/">Servidor PHP desde la consola Linux de Windows</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/03/04/servidor-php-desde-la-consola-linux-de-windows/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2276</post-id>	</item>
		<item>
		<title>Tumia.co Nuestra experiencia</title>
		<link>https://kumbiaphp.com/blog/2019/06/29/tumia-co-nuestra-experiencia-con-kumbiaphp/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tumia-co-nuestra-experiencia-con-kumbiaphp</link>
					<comments>https://kumbiaphp.com/blog/2019/06/29/tumia-co-nuestra-experiencia-con-kumbiaphp/#respond</comments>
		
		<dc:creator><![CDATA[Camilo Tilaguy]]></dc:creator>
		<pubDate>Sat, 29 Jun 2019 17:43:27 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webs con KumbiaPHP]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[experiencia]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[startup]]></category>
		<guid isPermaLink="false">https://www.kumbiaphp.com/blog/?p=2179</guid>

					<description><![CDATA[<p>En tumia.co tenemos un software de gestión para diferentes tipos de negocios. En el desarrollo del sistema elegimos Kumbiaphp y en este post contamos nuestra experiencia</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2019/06/29/tumia-co-nuestra-experiencia-con-kumbiaphp/">Tumia.co Nuestra experiencia</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 tumia.co tenemos un software de gestión para diferentes tipos de negocios, supermercados, farmacias, consultorios medicos, centros deportivos, gestión de eventos, venta en ruta, entre otros.</p>



<p class="wp-block-paragraph"><a href="https://tumia.co" target="_blank" rel="noreferrer noopener" aria-label=" (opens in a new tab)">Para el software de gestión tumia.co</a> hemos desarrollado más de 30 módulos, creado un API REST y también un APP para Android y para iOS.</p>



<p class="wp-block-paragraph">Ha sido un trabajo largo, llevamos 5 años en este proyecto y nos apoyamos en Kumbiaphp como se indica en el <a href="https://tumia.co/kumbiaphp-y-tumia-unidos-para-formar-un-buen-producto/">post que publicamos</a></p>



<h2 class="wp-block-heading">Antes de tumia.co &#8230;</h2>



<p class="wp-block-paragraph">Antes de crear tumia.co desarrollamos varios sistemas de CRM,  de comercio electrónico, de historia clínica, entre otros y eso nos sirvió para ver lo tedioso, complejo y costoso que resulta hacer un software sin un buen framework y sin una buena comunidad que lo respalde.</p>



<p class="wp-block-paragraph">Crear otros sistemas fue fácil, pero dar soporte, actualizar, mejorar y agregar nuevos módulos era un dolor de cabeza (en ese tiempo).</p>



<p class="wp-block-paragraph">Mediante Kumbiaphp resolvimos ese asunto, luego de aprender a usar el framework en poco tiempo, creamos una plataforma llamada Recaudo Efectivo con la cual atendíamos la facturación electronica de los clientes, poco a poco fue creciendo, pero a diferencia de los proyectos anteriores, con Kumbiaphp dar mantenimiento, realizar mejoras y agregar nuevos módulos no fue un dolor de cabeza, todo lo contrario.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Con Kumbiaphp crear nuevos módulos y dar soporte es todo un placer.</p><cite>Equipo de desarrollo de tumia.co</cite></blockquote>



<p class="wp-block-paragraph">Durante casi 5 años hemos depurado nuestro sistema, en ocaciones no usamos patrones de diseño y nos desviamos, pero retomar el buen camino con el framework y el apoyo de la comunidad resulto en algo muy sencillo.</p>



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



<h2 class="wp-block-heading">Las actualizaciones del framework</h2>



<p class="wp-block-paragraph">Posteriormente actualizar la version de PHP y adoptar las nuevas características del framework en nuestro sistema no fue nada complejo y es algo que nos gusto muchísimo, pues con otros framewoks suele ser un problema.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Actualizando Kumbiaphp no hemos tenido problema, siempre ha resultado fácil y nos beneficiamos de las nuevas características.</p><cite>Equipo de desarrollo de tumia.co</cite></blockquote>



<p class="wp-block-paragraph">Al momento de crear la APP android vimos la necesidad de crear una buena API para nuestro sistema y así compartir información con otros dispositivos; En esto nos sorprendió mucho Kumbiaphp, pues con el Rest Controller todo es super super fácil.</p>



<p class="wp-block-paragraph">El rest controller junto con el Active records hace un equipo ganador&#8230; realmente veloz como lo indica el <a href="https://www.kumbiaphp.com/blog/2017/04/19/frameworks-php-benchmark/">benchmark </a>y para desarrollar nuevas funcionalidades resulta muy fácil y nada preocupante.</p>



<h2 class="wp-block-heading">Capturas de pantalla de tumia.co</h2>



<p class="wp-block-paragraph"><em>Dejamos unas pocas, pues el sistema es bastante extenso</em></p>



<ul class="wp-block-gallery columns-1 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex" data-amp-lightbox="true"><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="711" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2019/06/tumia-pos-macbook-pro-1024x711.jpg" alt="" data-id="2180" data-link="https://www.kumbiaphp.com/blog/2019/06/29/tumia-co-nuestra-experiencia-con-kumbiaphp/tumia-pos-macbook-pro/" class="wp-image-2180" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2019/06/tumia-pos-macbook-pro-1024x711.jpg 1024w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/tumia-pos-macbook-pro-300x208.jpg 300w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/tumia-pos-macbook-pro-768x533.jpg 768w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/tumia-pos-macbook-pro-940x653.jpg 940w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/tumia-pos-macbook-pro.jpg 1620w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Tumia.co en un macbook</figcaption></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="654" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.46.24-p.-m.-1024x654.png" alt="" data-id="2181" data-link="https://www.kumbiaphp.com/blog/2019/06/29/tumia-co-nuestra-experiencia-con-kumbiaphp/captura-de-pantalla-2019-06-04-a-las-6-46-24-p-m/" class="wp-image-2181" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.46.24-p.-m.-1024x654.png 1024w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.46.24-p.-m.-300x192.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.46.24-p.-m.-768x491.png 768w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.46.24-p.-m.-940x601.png 940w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.46.24-p.-m..png 1343w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>tumia.co detalle de un producto</figcaption></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="801" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.44.47-p.-m.-1024x801.png" alt="" data-id="2182" data-link="https://www.kumbiaphp.com/blog/2019/06/29/tumia-co-nuestra-experiencia-con-kumbiaphp/captura-de-pantalla-2019-06-04-a-las-6-44-47-p-m/" class="wp-image-2182" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.44.47-p.-m.-1024x801.png 1024w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.44.47-p.-m.-300x235.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.44.47-p.-m.-768x601.png 768w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.44.47-p.-m.-940x735.png 940w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.44.47-p.-m..png 1110w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Ejemplo de factura electronica tumia.co</figcaption></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="616" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.44.04-p.-m.-1024x616.png" alt="tumia.co lista de facturas" data-id="2189" data-link="https://www.kumbiaphp.com/blog/2019/06/29/tumia-co-nuestra-experiencia-con-kumbiaphp/captura-de-pantalla-2019-06-04-a-las-6-44-04-p-m/" class="wp-image-2189" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.44.04-p.-m.-1024x616.png 1024w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.44.04-p.-m.-300x180.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.44.04-p.-m.-768x462.png 768w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.44.04-p.-m.-940x565.png 940w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.44.04-p.-m..png 1445w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Lista de facturas</figcaption></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="819" height="1024" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2019/06/tumia-POS-en-iPad-819x1024.jpg" alt="" data-id="2183" data-link="https://www.kumbiaphp.com/blog/2019/06/29/tumia-co-nuestra-experiencia-con-kumbiaphp/tumia-pos-en-ipad/" class="wp-image-2183" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2019/06/tumia-POS-en-iPad-819x1024.jpg 819w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/tumia-POS-en-iPad-240x300.jpg 240w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/tumia-POS-en-iPad-768x960.jpg 768w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/tumia-POS-en-iPad-940x1175.jpg 940w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/tumia-POS-en-iPad.jpg 1600w" sizes="auto, (max-width: 819px) 100vw, 819px" /><figcaption>Modulo POS en un ipad</figcaption></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="710" height="627" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-05-08-a-las-9.02.13-p.-m..png" alt="" data-id="2184" data-link="https://www.kumbiaphp.com/blog/2019/06/29/tumia-co-nuestra-experiencia-con-kumbiaphp/captura-de-pantalla-2019-05-08-a-las-9-02-13-p-m/" class="wp-image-2184" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-05-08-a-las-9.02.13-p.-m..png 710w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-05-08-a-las-9.02.13-p.-m.-300x265.png 300w" sizes="auto, (max-width: 710px) 100vw, 710px" /><figcaption>Algunos módulos de tumia.co</figcaption></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="765" height="645" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-05-08-a-las-9.03.21-p.-m..png" alt="" data-id="2185" data-link="https://www.kumbiaphp.com/blog/2019/06/29/tumia-co-nuestra-experiencia-con-kumbiaphp/captura-de-pantalla-2019-05-08-a-las-9-03-21-p-m/" class="wp-image-2185" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-05-08-a-las-9.03.21-p.-m..png 765w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-05-08-a-las-9.03.21-p.-m.-300x253.png 300w" sizes="auto, (max-width: 765px) 100vw, 765px" /><figcaption>Algunos módulos de tumia.co</figcaption></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="734" height="580" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-05-08-a-las-9.03.34-p.-m..png" alt="" data-id="2186" data-link="https://www.kumbiaphp.com/blog/2019/06/29/tumia-co-nuestra-experiencia-con-kumbiaphp/captura-de-pantalla-2019-05-08-a-las-9-03-34-p-m/" class="wp-image-2186" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-05-08-a-las-9.03.34-p.-m..png 734w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-05-08-a-las-9.03.34-p.-m.-300x237.png 300w" sizes="auto, (max-width: 734px) 100vw, 734px" /><figcaption>Algunos módulos de tumia.co</figcaption></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="612" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.42.22-p.-m.-1024x612.png" alt="" data-id="2188" data-link="https://www.kumbiaphp.com/blog/2019/06/29/tumia-co-nuestra-experiencia-con-kumbiaphp/captura-de-pantalla-2019-06-04-a-las-6-42-22-p-m/" class="wp-image-2188" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.42.22-p.-m.-1024x612.png 1024w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.42.22-p.-m.-300x179.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.42.22-p.-m.-768x459.png 768w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.42.22-p.-m.-940x562.png 940w, https://kumbiaphp.com/blog/wp-content/uploads/2019/06/Captura-de-Pantalla-2019-06-04-a-las-6.42.22-p.-m..png 1459w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Ejemplo de factura del modulo POS</figcaption></figure></li></ul>



<p class="wp-block-paragraph">Disfrutamos mucho en el desarrollo de tumia.co tenemos muchos módulos para desarrollar y otros para actualizar.</p>



<p class="wp-block-paragraph">Con la evolución de Javascript y los frameworks JS, gran parte de nuestro sistema se esta apoyando también en vueJS, pero sin dejar a un lado a Kumbiaphp pues nos continua brindando una excelente API REST.</p>



<p class="wp-block-paragraph">Agradecemos a la comunidad Kumbiaphp en Slack y buscamos el tiempo para apoyar este excelente proyecto <a href="http://slack.kumbiaphp.com/">http://slack.kumbiaphp.com/</a></p>



<p class="wp-block-paragraph">Muy contentos animamos a los emprendedores a conocer y beneficiarse de todo lo que ofrece Kumbiaphp Framework.</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2019/06/29/tumia-co-nuestra-experiencia-con-kumbiaphp/">Tumia.co Nuestra experiencia</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/2019/06/29/tumia-co-nuestra-experiencia-con-kumbiaphp/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2179</post-id>	</item>
		<item>
		<title>Formularios a base de datos fácilmente con 1 línea de código</title>
		<link>https://kumbiaphp.com/blog/2019/05/27/formularios-a-base-de-datos-facilmente-1-linea-de-codigo/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=formularios-a-base-de-datos-facilmente-1-linea-de-codigo</link>
					<comments>https://kumbiaphp.com/blog/2019/05/27/formularios-a-base-de-datos-facilmente-1-linea-de-codigo/#comments</comments>
		
		<dc:creator><![CDATA[HenryStivens]]></dc:creator>
		<pubDate>Mon, 27 May 2019 16:16:18 +0000</pubDate>
				<category><![CDATA[Documentación]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ejemplos]]></category>
		<guid isPermaLink="false">https://www.kumbiaphp.com/blog/?p=1641</guid>

					<description><![CDATA[<p>En KumbiaPHP existe una implementación que ahorra muchísimo trabajo a la hora de hacer formularios y la intención es&#8230;</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2019/05/27/formularios-a-base-de-datos-facilmente-1-linea-de-codigo/">Formularios a base de datos fácilmente con 1 línea de código</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 KumbiaPHP existe una implementación que ahorra muchísimo trabajo a la hora de hacer formularios y la intención es aprovechar al máximo las bondades que ofrece el framework. En este sentido tenemos la <strong>Autocarga de objeto</strong>, la cual, como su nombre indica asocia un campo de formulario a una tabla y campo de la base de datos.</p>



<h2 class="wp-block-heading">DDL y modelo para la tabla</h2>



<p class="wp-block-paragraph">Veamos la estructura de la tabla <em>user </em>que hemos visto en ejemplos anteriores:</p>



<pre class="wp-block-code language-sql"><code>CREATE TABLE `user` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) NOT NULL,
 `age` int(11) NOT NULL DEFAULT &#039;0&#039;,
 `email` varchar(255) NOT NULL, 
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;</code></pre>



<p class="wp-block-paragraph">Y el modelo para este caso lo haremos heredar de la clase <a href="https://github.com/KumbiaPHP/Documentation/blob/master/es/active-record.md">ActiveRecord</a> y lo ubicamos en <em>default/app/models/user.php</em></p>



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

class User extends ActiveRecord
{
    
}</code></pre>



<h2 class="wp-block-heading">Implementación de la autocarga de objeto</h2>



<p class="wp-block-paragraph">KumbiaPHP implementa la&nbsp;<strong>Autocarga de objeto</strong> la cual, siguiendo una convención mínima <strong>modelo.campo</strong> donde para el ejemplo el modelo es <em>user</em>, es decir existe una tabla llamada <em>user</em> en la base de datos y <em>campo</em> serán cada una de las columnas de esa tabla (id, name, age, email).</p>



<p class="wp-block-paragraph">En concordancia con las columnas de la tabla <em>use</em>r se indica el comportamiento de la <em>Autocarga de objeto</em> para que el controller no tenga que recoger uno a uno los valores enviado por POST.</p>



<p class="wp-block-paragraph">Para este caso usaremos el helper <a href="https://github.com/KumbiaPHP/Documentation/blob/master/es/view.md#clase-form"><em>Form</em></a>:</p>



<p class="wp-block-paragraph">Archivo: <em>default/app/views/user/create.phtml</em></p>



<pre class="wp-block-code language-php"><code>&lt;?php View::content() ?&gt;

&lt;?= Form::open() ?&gt;
&lt;?= Form::text(&#039;user.name&#039;) ?&gt; 
&lt;?= Form::email(&#039;user.email&#039;) ?&gt;
&lt;?= Form::number(&#039;user.age&#039;) ?&gt;
&lt;?= Form::submit(&#039;Guardar&#039;) ?&gt;
&lt;?= Form::close() ?&gt;</code></pre>



<p class="wp-block-paragraph">Automáticamente cuando esos valores vayan a la url /<em>user/create</em> KumbiaPHP interpreta que existe una tabla <em>user</em> con los campos <em>name, email</em> y<em> age.<br>
</em></p>



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



<h2 class="wp-block-heading">Aplicando autocarga en el controlador</h2>



<p class="wp-block-paragraph">Ahora vemos el código que se utiliza en <em>controllers/user_controller.php</em> en su acción <em>create()</em>.</p>



<p class="wp-block-paragraph">Archivo: <em>default/app/controllers/user_controller.php</em></p>



<pre class="wp-block-code language-php"><code>&lt;?php 
/**
 * Controlador para las acciones y vistas con el usuario 
 */ 
class UserController extends AppController
{ 

    public function index()
    {
        // Se debe implementar la función de listar
    }

    public function create()
    {
        //se verifica si se ha enviado via POST los datos
        if ( ! Input::hasPost(&#039;user&#039;)) {
            return;
        }
            
        //Intenta guardar el usuario
        if ((new User)-&gt;create(Input::post(&#039;user&#039;))) {
            //Mensaje de éxito 
            Flash::valid(&#039;Usuario creado&#039;);
            //Elimina los datos del POST, muestra limpio el formulario
            Input::delete();
            return;
        }
        //Mensaje de fallo 
        Flash::error(&#039;Falló al intentar crear el usuario&#039;);
    }
}</code></pre>



<p class="wp-block-paragraph">Si probamos el formulario y por alguna razón falla al guardar, automáticamente mostrará el formulario con los datos que se intentaron guardar, sin que debamos estar verificando si hay datos en el POST y si los hubiera indicarle al input el value, ya que el helper Form lo hace por nosotros.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="922" height="825" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2018/12/fomurlario-con-autocarga-de-objeto.png" alt="" class="wp-image-2059" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2018/12/fomurlario-con-autocarga-de-objeto.png 922w, https://kumbiaphp.com/blog/wp-content/uploads/2018/12/fomurlario-con-autocarga-de-objeto-300x268.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2018/12/fomurlario-con-autocarga-de-objeto-768x687.png 768w" sizes="auto, (max-width: 922px) 100vw, 922px" /></figure>



<p class="wp-block-paragraph">Con esto se ahorra mucho trabajo y le sacamos el máximo provecho a KumbiaPHP Framework.</p>



<h2 class="wp-block-heading">Acceder a un campo del formulario enviado mediante POST</h2>



<p class="wp-block-paragraph">A veces nos consultan como se accede a un campo específico del formulario que viene en el POST en el controlador, y es muy sencillo veamos qué valor trae <em>Input::post(&#8216;user&#8217;):</em></p>



<pre class="wp-block-preformatted">array(3) {
  ['name']=&gt;
  string(8) "John Doe"
  ['email']=&gt;
  string(12) "jd@email.com"
  ['age]=&gt;
  int(30)
}
</pre>



<p class="wp-block-paragraph">Como pueden ver al hacer un <a href="http://php.net/manual/en/function.var-dump.php">var_dump()</a> de la variable nos muestra que es un simple arreglo por lo tanto la manera de acceder es la siguiente:</p>



<pre class="wp-block-code language-php"><code>$name = Input::post(&#039;user.name&#039;);
// or
$name = Input::post(&#039;user&#039;)[&#039;name&#039;];</code></pre>



<p class="wp-block-paragraph">Son casos especiales y lo mejor es que aprovechen al máximo la autocarga.</p>



<h2 class="wp-block-heading">Error común de novatos</h2>



<p class="wp-block-paragraph">Es común ver en quienes inician con KumbiaPHP cometer varios errores y uno de ellos es crear el objeto o registro campo por campo. Lo vemos mejor en el siguiente código de la función <em>create()</em> del controlador <em>UserController</em>:</p>



<pre class="wp-block-code language-php"><code>public function create()
{
    //se verifica si se ha enviado via POST los datos
    if (Input::hasPost(&#039;user&#039;)) {
        $data = Input::post(&#039;user&#039;);
        //Código incorrecto: Obtener del POST el valor de
        //cada input y asignarlo uno a uno al objeto.
        $user = new User();
        $user-&gt;name = $data[&#039;name&#039;];
        $user-&gt;email = $data[&#039;email&#039;];
        $user-&gt;age = $data[&#039;age&#039;];
        //Intenta guardar el usuario
        if ($user-&gt;create()) {
            //Mensaje de éxito
            Flash::valid(&#039;Usuario creado&#039;);
            //Elimina los datos del POST, muestra limpio el formulario
            Input::delete();
            return;
        }
        //Mensaje de fallo
        Flash::error(&#039;Falló al intentar crear el usuario&#039;);
    }
}</code></pre>



<p class="wp-block-paragraph">Funciona si, pero como pueden notar, se agregaron para este caso cinco líneas de código innecesarias. Ahora imaginen que no son tres campos en el formulario, si no que son diez, veinte o más campos por formulario. Ahora multipliquemos eso por el número de formularios de toda la aplicación.</p>



<p class="wp-block-paragraph">El código creado sería muy extenso y se convierte en difícil de leer y mantener.</p>



<p class="wp-block-paragraph">Espero que les sea de utilidad este artículo.</p>



<p class="wp-block-paragraph">PD: Agradecimientos a&nbsp;<span class="tadv-format-panel author"><a href="/blog/author/deivinson/">Deivinson Tejeda</a></span> por el borrador de este artículo.</p>


<p>La entrada <a href="https://kumbiaphp.com/blog/2019/05/27/formularios-a-base-de-datos-facilmente-1-linea-de-codigo/">Formularios a base de datos fácilmente con 1 línea de código</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/2019/05/27/formularios-a-base-de-datos-facilmente-1-linea-de-codigo/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1641</post-id>	</item>
		<item>
		<title>Exportar tabla HTML a PDF</title>
		<link>https://kumbiaphp.com/blog/2019/04/29/exportar-tabla-html-a-pdf/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=exportar-tabla-html-a-pdf</link>
					<comments>https://kumbiaphp.com/blog/2019/04/29/exportar-tabla-html-a-pdf/#respond</comments>
		
		<dc:creator><![CDATA[HenryStivens]]></dc:creator>
		<pubDate>Sun, 28 Apr 2019 23:29:56 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriales y screencast]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[mpdf]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[template]]></category>
		<guid isPermaLink="false">https://www.kumbiaphp.com/blog/?p=2078</guid>

					<description><![CDATA[<p>En esta segunda parte veremos como exportar una tabla HTML a PDF usando la librería mPDF. Si no has&#8230;</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2019/04/29/exportar-tabla-html-a-pdf/">Exportar tabla HTML a PDF</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 esta segunda parte veremos como exportar una tabla HTML a PDF usando la librería mPDF. Si no has visto la primera parte este es el primer artículo: <a href="https://www.kumbiaphp.com/blog/2018/08/06/crear-pdf-usando-html/">Crear PDF usando HTML</a> donde aprendimos a crear un PDF usando partials y funciones en un modelo.</p>



<p class="wp-block-paragraph">[Actualización: Abril 2020] Hemos creado un nuevo repositorio llamado <a rel="noreferrer noopener" href="https://github.com/KumbiaPHP/Sandbox/" target="_blank">Sandbox en Github</a>  donde van a estar todos los ejemplos y que podrán visualizar en vivo en la página <a rel="noreferrer noopener" href="https://sandbox.kumbiaphp.com/" target="_blank">KumbiaPHP Framework Examples</a> por lo tanto el código se ha mejorado y los links han cambiado.</p>



<h2 class="wp-block-heading">Template PDF</h2>



<p class="wp-block-paragraph">Un template permite ahorrar código que se repite en la vistas, permitiendo así un fácil mantenimiento y separación del contenido. Realizará la carga de librería, la cabecera y el pié de página y por supuesto el contenido que queremos mostrar.</p>



<p class="wp-block-paragraph">Para los que aun no han visto el tema de templates en KumbiaPHP o tienen dudas de su funcionamiento los invito a leer la sección sobre el <a href="https://github.com/KumbiaPHP/Documentation/blob/master/es/view.md">manejo de vistas en KumbiapHP.</a> A continuación el código completo del template y más abajo con capturas se explica cada parte importante.</p>



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



<p class="wp-block-paragraph">Archivo: <em>app/views/_shared/templates/pdf/mpdf.phtml</em></p>



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

use Mpdf\Mpdf;

/* Defaults */

// fileName
$fileName = $filename ?? &quot;Reporte-de-$controller_name&quot;;

// Title
$title = $title ?? &quot;Reporte de $controller_name&quot;;

// CSS
$css = $css ?? &#039;css/pdf.css&#039;;

// Destination I show in browser  D download
$destination = isset($download) &amp;&amp; $download ? &#039;D&#039; : &#039;I&#039;;

//Activa el almacenamiento en búfer de la salida
ob_start();

?&gt;
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;

&lt;head&gt;
    &lt;title&gt;&lt;?= $title ?&gt;&lt;/title&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;&lt;?= $css ?&gt;&quot;&gt;
    &lt;meta name=&quot;author&quot; content=&quot;KumbiaPHP framework&quot;&gt;
    &lt;meta name=&quot;description&quot; content=&quot;PDF output example with KumbiaPHP framework&quot;&gt;
    &lt;meta name=&quot;keywords&quot; content=&quot;kumbiaphp, php, pdf, mpdf, examples&quot;&gt;

&lt;body&gt;
    &lt;htmlpageheader name=&quot;myHeader1&quot;&gt;
        &lt;section id=&quot;page-header&quot;&gt;
            &lt;a href=&quot;https://www.kumbiaphp.com&quot;&gt;&lt;img src=&quot;img/kumbiaphp.svg&quot; alt=&quot;Logo KumbiaPHP&quot;&gt;&lt;/a&gt;
            &lt;p&gt;Powered by&lt;/p&gt;
        &lt;/section&gt;
    &lt;/htmlpageheader&gt;

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

    &lt;htmlpagefooter name=&quot;myFooter1&quot;&gt;
        &lt;section id=&quot;page-footer&quot;&gt;
            &lt;div id=&quot;printed-date&quot;&gt;{DATE d/m/Y}&lt;/div&gt;
            &lt;div id=&quot;page-number&quot;&gt;{PAGENO}/{nbpg}&lt;/div&gt;
        &lt;/section&gt;
    &lt;/htmlpagefooter&gt;
&lt;/body&gt;

&lt;/html&gt;
&lt;?php
$html = ob_get_clean();
ob_clean();

// Crea una instancia de la clase y le pasa el directorio temporal
$mpdf = new Mpdf(&#091;
    &#039;tempDir&#039; =&gt; APP_PATH . &#039;temp/mpdf&#039;,
    &#039;format&#039; =&gt; &#039;A4&#039;,
    &#039;title2annots&#039; =&gt; true,  // convert headers &lt;hx&gt; in annotations
    &#039;mirrorMargins&#039; =&gt; 0,    // mirror the left and right margin values on odd and even pages 
    &#039;exposeVersion&#039; =&gt; false // security 
    // more variables in https://mpdf.github.io/reference/mpdf-variables/overview.html
]);

// Escribe el contenido HTML (Template + View):
$mpdf-&gt;WriteHTML($html);

// Genera el PDF, ya sea para su descarga o visualización en el navegador
$mpdf-&gt;Output(&quot;$fileName.pdf&quot;, $destination);
</code></pre>



<p class="wp-block-paragraph">El proyecto ya usa el autoload de composer para tener disponible mPDF y simplemente importa <em>Mpdf\Mpdf</em>. Luego se definen algunas variables para personalizar el PDF y se ejecuta la función <a href="https://www.php.net/manual/es/function.ob-start.php">ob_start()</a>. «Esta función activará el almacenamiento en búfer de la salida. Mientras dicho almacenamiento esté activo, no se enviará ninguna salida desde el script (aparte de cabeceras); en su lugar la salida se almacenará en un búfer interno.»</p>



<p class="wp-block-paragraph">Si desean conocer como agregar encabezados y pies de páginas con mPDF un compañero realizó un manual en la Wiki de KumbiaPHP que muestra como agregarlos usando las funciones explicadas en el artículo anterior: <a href="http://wiki.kumbiaphp.com/Exportar_a_PDF_con_cabecera_y_pie_de_pagina">Exportar a PDF con cabecera y pie de pagina</a></p>



<p class="wp-block-paragraph">Ahora en el <em>&lt;body&gt;</em> definimos el contenido de la cabecera y el pie de página, y entre ellos la función <em><a href="https://github.com/KumbiaPHP/Documentation/blob/master/es/view.md#buffer-de-salida">View::content()</a></em> que nos permite mostrar el contenido de la vista.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="442" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/04/template-pdf-body-html-1024x442.png" alt="" class="wp-image-2401" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/04/template-pdf-body-html-1024x442.png 1024w, https://kumbiaphp.com/blog/wp-content/uploads/2020/04/template-pdf-body-html-300x130.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2020/04/template-pdf-body-html-768x332.png 768w, https://kumbiaphp.com/blog/wp-content/uploads/2020/04/template-pdf-body-html-940x406.png 940w, https://kumbiaphp.com/blog/wp-content/uploads/2020/04/template-pdf-body-html.png 1111w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Contenido del Body</figcaption></figure>



<p class="wp-block-paragraph">mPDF maneja sus propias etiquetas, van entre llaves {} y usamos algunas de ellas:</p>



<ul class="wp-block-list"><li>DATE: Para mostrar la fecha actual</li><li>PAGENO: Número de la página</li><li>nbpg: Número total de páginas del documento</li></ul>



<p class="wp-block-paragraph">Y la parte final del template es la que se encarga de unir el template con la vista, generar el PDF con ese contenido y hacer que el documento se visualice o descargue.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1021" height="541" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/04/template-pdf-generate.png" alt="" class="wp-image-2402" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/04/template-pdf-generate.png 1021w, https://kumbiaphp.com/blog/wp-content/uploads/2020/04/template-pdf-generate-300x159.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2020/04/template-pdf-generate-768x407.png 768w, https://kumbiaphp.com/blog/wp-content/uploads/2020/04/template-pdf-generate-940x498.png 940w" sizes="auto, (max-width: 1021px) 100vw, 1021px" /><figcaption>General el PDF con el contenido HTML</figcaption></figure>



<h2 class="wp-block-heading">Controlador PHP</h2>



<p class="wp-block-paragraph">Vamos a crear una nueva vista y para ello empezamos con el método que llamaremos <em>pdf()</em> en el controlador <em><em>templates_examples_controller</em>.php</em> El código se encuentra explicado entre líneas.</p>



<p class="wp-block-paragraph">Archivo: <em>app/controllers/templates_examples_controller.php</em></p>



<pre class="wp-block-code language-php"><code>public function pdf()
{
    //Usa el tempalte &#039;pdf&#039;
    View::template(&#039;pdf/mpdf&#039;);
    //Modifica el nombre del archivo a descargar
    $this-&gt;fileName = &#039;user-list&#039;;
    //Modifica el título del documento PDF en la cabecera
    $this-&gt;title = &#039;User List&#039;;
    $this-&gt;download = false;

    $this-&gt;data = User::all(); // data to show (model User from db)
}</code></pre>



<h2 class="wp-block-heading">Vista HTML</h2>



<p class="wp-block-paragraph">Ahora crearemos la vista la cual tendrá la tabla, recorriendo uno a uno los registro de la consulta realizada por el modelo en el controlador.</p>



<p class="wp-block-paragraph">Archivo: <em>app/views/templates_examples/pdf.phtml&nbsp;</em></p>



<pre class="wp-block-code language-php"><code>&lt;?php if (!count($data)) : ?&gt;
    &lt;h2&gt;No hay ningún registro&lt;/h2&gt; 
&lt;?php else : ?&gt;
    &lt;table class=&quot;report&quot;&gt;
    &lt;caption class=&quot;caption&quot;&gt;&lt;?= $title ?&gt;&lt;/caption&gt;
        &lt;thead&gt;
            &lt;tr&gt;
                &lt;th scope=&quot;col&quot;&gt;First Name&lt;/th&gt;
                &lt;th scope=&quot;col&quot;&gt;Last Name&lt;/th&gt;
                &lt;th scope=&quot;col&quot;&gt;Email&lt;/th&gt;
                &lt;th scope=&quot;col&quot;&gt;Birthdate&lt;/th&gt;
            &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody&gt; 
            &lt;?php foreach ($data as $item) : ?&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;?= $item-&gt;first_name ?&gt;&lt;/td&gt;
                    &lt;td&gt;&lt;?= $item-&gt;last_name ?&gt;&lt;/td&gt;
                    &lt;td&gt;&lt;?= $item-&gt;email ?&gt;&lt;/td&gt;
                    &lt;td&gt;&lt;?= $item-&gt;birthdate ?&gt;&lt;/td&gt;
                &lt;/tr&gt;
            &lt;?php endforeach ?&gt;
        &lt;/tbody&gt;
    &lt;/table&gt;
&lt;?php endif ?&gt;</code></pre>



<p class="wp-block-paragraph">No hace falta explicar mucho más de la vista anterior ya que es una vista normal en KumbiaPHP, esta vista es reutilizable por ejemplo si se quiere pasar a un documento Excel o devolver la vista mediante AJAX.</p>



<h2 class="wp-block-heading">Enlazar al reporte PDF</h2>



<p class="wp-block-paragraph">Y en donde queramos que esté el enlace al reporte PDF simplemente lo añadimos a la vista deseada, nosotros lo hemos añadio a la página de información de los ejemplos de template.</p>



<p class="wp-block-paragraph">Archivo: <em>app/views/templates_examples/info.pdf.phtml</em></p>



<pre class="wp-block-code language-php"><code>&lt;a href=&quot;/templates-examples/pdf&quot; target=&quot;_blank&quot;&gt;Export users list&lt;/a&gt;</code></pre>



<p class="wp-block-paragraph">Y al pulsar el botón visualizaremos el documento PDF como el siguiente:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="855" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2020/04/example-pdf-kumbiaphp-1024x855.png" alt="" class="wp-image-2403" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2020/04/example-pdf-kumbiaphp-1024x855.png 1024w, https://kumbiaphp.com/blog/wp-content/uploads/2020/04/example-pdf-kumbiaphp-300x250.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2020/04/example-pdf-kumbiaphp-768x641.png 768w, https://kumbiaphp.com/blog/wp-content/uploads/2020/04/example-pdf-kumbiaphp-940x785.png 940w, https://kumbiaphp.com/blog/wp-content/uploads/2020/04/example-pdf-kumbiaphp.png 1259w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Visualización del PDF generado con HTML</figcaption></figure>



<h2 class="wp-block-heading">Descargar código completo</h2>



<p class="wp-block-paragraph">Como siempre, el código completo está disponible para todos en el siguiente repositorio en Github listo para usar: <a href="https://github.com/KumbiaPHP/Sandbox/" target="_blank" rel="noreferrer noopener">https://github.com/KumbiaPHP/Sandbox/</a></p>


<p>La entrada <a href="https://kumbiaphp.com/blog/2019/04/29/exportar-tabla-html-a-pdf/">Exportar tabla HTML a PDF</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/2019/04/29/exportar-tabla-html-a-pdf/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2078</post-id>	</item>
		<item>
		<title>Errores comunes al subir web o aplicación php a producción</title>
		<link>https://kumbiaphp.com/blog/2018/11/05/errores-comunes-al-subir-web-o-aplicacion-php-a-produccion/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=errores-comunes-al-subir-web-o-aplicacion-php-a-produccion</link>
					<comments>https://kumbiaphp.com/blog/2018/11/05/errores-comunes-al-subir-web-o-aplicacion-php-a-produccion/#comments</comments>
		
		<dc:creator><![CDATA[Nelson Rojas]]></dc:creator>
		<pubDate>Mon, 05 Nov 2018 02:48:01 +0000</pubDate>
				<category><![CDATA[Documentación]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriales y screencast]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[producción]]></category>
		<category><![CDATA[servidor php]]></category>
		<guid isPermaLink="false">https://www.kumbiaphp.com/blog/?p=1972</guid>

					<description><![CDATA[<p>La labor de desarrollo de aplicaciones conlleva problemas que no logramos reconocer a primera vista. Este post tiene por&#8230;</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2018/11/05/errores-comunes-al-subir-web-o-aplicacion-php-a-produccion/">Errores comunes al subir web o aplicación php a producción</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>La labor de desarrollo de aplicaciones conlleva problemas que no logramos reconocer a primera vista. Este post tiene por finalidad, ayudarnos a detectar los errores más comunes cuando hacemos el paso a producción (deployment) de nuestra aplicación hecha con KumbiaPHP.</p>
<p>Va especialmente dedicado a nuestros colegas que alguna vez han llegado al chat grupal con la frase:</p>
<blockquote><p>Es que no funciona en producción</p></blockquote>
<p>La primera pregunta que debemos resolver es:</p>
<h2>¿Por qué no funciona?</h2>
<p>A continuación presentamos una lista de los temas más comunes que deberíamos tener en cuenta para resolver la pregunta que impulsa este artículo.</p>
<p><span id="more-1972"></span></p>
<ol>
<li><a href="#apache-server">¿El servidor apache está ejecutándose?</a></li>
<li><a href="#mod-rewrite-activo">¿El mod rewrite está activo?</a></li>
<li><a href="#mod-rewrite-activo">¿El mod rewrite está configurado para nuestra ruta en el servidor?</a></li>
<li><a href="#php-instalado">¿PHP está instalado y configurado?</a></li>
<li><a href="#base-datos-activo">¿El servidor de bases de datos está activo?</a></li>
<li><a href="#base-datos-configuracion">¿La cuenta en el servidor de bases de datos es la que corresponde en la configuración de nuestra aplicación?</a></li>
<li><a href="#base-datos-produccion">¿Hemos trasladado todos los cambios desde el servidor de bases de datos de desarrollo hacia el servidor de producción?</a></li>
<li><a href="#permisos-app">¿Nuestra aplicación tiene los permisos bien configurados?</a></li>
<li><a href="#ficheros-ocultos">¿Hemos copiado completamente la aplicación desde el servidor de desarrollo (incluidos todos los archivos .htaccess)?</a></li>
<li><a href="#configurar-path">¿Hemos configurado correctamente la constante PUBLIC_PATH?</a></li>
<li><a href="#estrategia-url">¿Podemos usar PATH_INFO o necesitamos cambiar la estrategia de generación de URL?</a></li>
<li><a href="#activar-errores">Si estamos completamente a ciegas, ¿hemos activado la visualización de errores?</a></li>
<li><a href="#app-too-many-redirects">El sitio presenta un error ERR_TOO_MANY_REDIRECTS al cargarlo</a>.</li>
</ol>
<p><strong>NOTA: </strong> Si es <strong>la primera vez</strong> que haces un paso a producción (deployment) a un servidor dedicado o en un hosting compartido, te recomendamos leer los siguientes artículos que hemos alojado en nuestra wiki.</p>
<ul>
<li style="font-weight: 400;">Pasar a producción: <a href="http://wiki.kumbiaphp.com/Pasar_a_produccion">http://wiki.kumbiaphp.com/Pasar_a_produccion</a></li>
<li>Kumbia en servidor con CPanel: <a href="http://wiki.kumbiaphp.com/KumbiaPHP_en_servidor_con_CPanel">http://wiki.kumbiaphp.com/KumbiaPHP_en_servidor_con_CPanel</a></li>
</ul>
<p>Continuemos entonces con el checklist:</p>
<h2><a id="apache-server"></a>¿El servidor Apache está ejecutándose?</h2>
<p>Nuestra primera tarea será revisar que el servicio de Apache se encuentre activo y en el puerto necesario. Asumiendo que la tarea de despliegue (deployment) se realiza en un servidor linux, podemos revisar si el servicio está activo y si acaso el puerto está escuchando.</p>
<p>Revisemos el servicio web con los siguientes comandos:</p>
<pre>ps -fea | grep -i http
ps -fea | grep -i apache</pre>
<p>Si encontramos resultados, es decir, al menos 2 líneas se visualizan como salida a nuestro comando*, es que el servicio está activo.</p>
<p><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-07.44.28.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1979" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-07.44.28.png" alt="" width="848" height="252" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-07.44.28.png 848w, https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-07.44.28-300x89.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-07.44.28-768x228.png 768w" sizes="auto, (max-width: 848px) 100vw, 848px" /></a></p>
<p>*el comando <strong>ps</strong> es “<strong>p</strong>rocess <strong>s</strong>tatus” o estado del proceso. Las opciones -fea son para indicar que nos liste los procesos de nuestro usuario como del resto, así como algo de información relacionada con el proceso. Para realizar el filtro entre todos los procesos hemos usado un pipe | o tubería para enviar el resultado del comando ps al comando grep que buscará en la lista si acaso existe algo que contenga el texto “http”, o algo que contenga “apache”. Se usa con -i para que no discrimine entre mayúsculas y minúsculas o alguna combinación de ellas. Para más ayuda sobre estos comando les recomendamos usar el comando man ps o también pueden usar man grep.</p>
<p>NOTA: si usan el comando man (manual) para ps o para grep lo más seguro es que se encuentren con el editor vi. Para salir de él bastará con presionar Esc (escape), luego : (dos puntos) y luego q (la letra q para quit).</p>
<p>Revisemos ahora que el servicio está activo y escuchando peticiones.</p>
<p>Para eso nos bastará en primera instancia abrir un navegador y apuntarlo a la dirección de nuestro servidor. Si tenemos respuesta de la página de bienvenida del servicio (apache) ya tendremos este tema resuelto.</p>
<p>Ahora, si tenemos acceso por consola, podemos probar usando el comando</p>
<pre>netstat -av | grep http</pre>
<p>En mi caso, uso apache y su nombre de servicio es http. En otros Sistemas Operativos o paquetes de software que incluyen Apache, el servicio web puede encontrarse como apache o apache2.</p>
<p><a id="mod-rewrite-activo"></a><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-07.40.01-1.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1978" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-07.40.01-1.png" alt="" width="848" height="252" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-07.40.01-1.png 848w, https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-07.40.01-1-300x89.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-07.40.01-1-768x228.png 768w" sizes="auto, (max-width: 848px) 100vw, 848px" /></a></p>
<h2><a id="mod-rewrite-activo"></a>¿El mod rewrite está activado?</h2>
<p>Esta pregunta no es difícil de responder si usamos un pequeño archivo PHP al que llamaremos info.php. En él escribiremos &lt;?php phpinfo(); ?&gt; y luego lo abriremos desde el navegador (normalmente http://localhost/info.php)</p>
<p>Así aprovecharemos para revisar que PHP está activo y en la versión del mismo.</p>
<p>Una vez cargue la página de información de php buscaremos (en general con Ctrl + F o Cmd + F) la palabra rewrite. Deberíamos encontrarla en la sección apache2handlers, en la fila Loaded Modules.</p>
<p><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-07.51.29.png"><img loading="lazy" decoding="async" class="alignnone wp-image-1982 size-full" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-07.51.29.png" alt="Información del php info" width="953" height="370" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-07.51.29.png 953w, https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-07.51.29-300x116.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-07.51.29-768x298.png 768w, https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-07.51.29-940x365.png 940w" sizes="auto, (max-width: 953px) 100vw, 953px" /></a></p>
<p>Como se aprecia en la imagen anterior también está activo mod_php7 :-)</p>
<p>En caso que no lo encontremos, o que el archivo info.php no nos dé información, bastará con hacer la activación desde la consola (en el caso de tener servidor con shell activa). Vamos a asumir que usamos un servidor con un sistema operativo derivado de debian (ubuntu o similar). Entonces escribiremos en la consola como root</p>
<pre>a2enmod rewrite</pre>
<p>Y luego reiniciamos el servicio de apache (también como root)</p>
<pre>service apache2 restart</pre>
<p>Con esto ya deberíamos tener activado el módulo de sobrescritura de url.</p>
<h2><a id="mod-rewrite-activo"></a>¿El mod rewrite está configurado para nuestra ruta en el servidor?</h2>
<p>Bueno, no basta con activar el mod rewrite, hay que configurarlo también.</p>
<pre><strong>Nota del autor:</strong> esto es lo que normalmente hago en mi configuración de apache. 
No sé si es lo más recomendado. Los comentarios son bienvenidos :)</pre>
<p>Para realizar este cambio iremos al archivo de configuración de apache (generalmente alojado en /etc/apache2/apache2.conf)</p>
<p>Lo editaremos y buscaremos una sección llamada Directory.</p>
<p>Buscaremos aquella cuya línea sea Directory /var/www y cambiaremos la opción AllowOverride None por AllowOverride All. Guardaremos la configuración y procederemos a reiniciar el servicio apache.</p>
<p>En las imágenes siguientes se ve el antes y el después de la configuración.</p>
<figure><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.04.50.png"><img loading="lazy" decoding="async" class="wp-image-1984 size-full" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.04.50.png" alt="antes de la configuración" width="593" height="190" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.04.50.png 593w, https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.04.50-300x96.png 300w" sizes="auto, (max-width: 593px) 100vw, 593px" /></a><figcaption>Antes de la configuración</figcaption></figure>
<figure><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.06.22.png"><img loading="lazy" decoding="async" class="size-full wp-image-1985" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.06.22.png" alt="luego de cambiar la configuración" width="593" height="140" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.06.22.png 593w, https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.06.22-300x71.png 300w" sizes="auto, (max-width: 593px) 100vw, 593px" /></a><figcaption>luego de cambiar la configuración</figcaption></figure>
<p>Con estos pasos el mod rewrite estará activo y configurado.</p>
<h2><a id="php-instalado"></a>¿PHP está instalado y configurado?</h2>
<p>Si hemos llevado a cabo los pasos anteriores para saber si el mod rewrite estaba activo, y lo hemos encontrado en el archivo info.php, entonces es que tenemos PHP bien instalado.</p>
<p>En caso que no hayamos logrado entonces deberemos instalar el módulo PHP en nuestro servidor.</p>
<p>Para hacer esta tarea usaremos nuevamente la consola (shell) para hacer la instalación.</p>
<p>La instalación varía un poco entre distribuciones de servidor, pero haremos la instalación pensando en algún derivado de debian (como si fuéramos root)</p>
<pre>apt-get install libapache2-mod-php php</pre>
<p>Una vez que la instalación haya finalizado necesitaremos reiniciar el servicio web (como root)</p>
<pre>service apache2 restart</pre>
<p>Si tenemos aún el archivo info.php, pues lo abriremos desde el navegador (normalmente http://localhost/info.php)</p>
<p>Si logramos ver el resultado de nuestro archivo, entonces ya tendremos claro que PHP está activo en nuestro servidor.</p>
<h2><a id="base-datos-activo"></a>¿El servidor de bases de datos está activo?</h2>
<p>Si usamos MySQL o MariaDB bastará con intentar hacer login con la cuenta que tenemos en la configuración de nuestra aplicación desde la consola.</p>
<pre>mysql nombredelabasededatos -u miusuario -p</pre>
<p>Digitamos la contraseña y presionamos enter para lograr acceso.</p>
<p>Si nos da un error como el que se ve en la imagen siguiente es porque el servicio no está activo.</p>
<p><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.11.50.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1986" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.11.50.png" alt="" width="887" height="154" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.11.50.png 887w, https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.11.50-300x52.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.11.50-768x133.png 768w" sizes="auto, (max-width: 887px) 100vw, 887px" /></a></p>
<p>Para activarlo deberemos ejecutar un comando como el que sigue desde la consola (como si fuéramos root):</p>
<pre>service mysqld start</pre>
<p><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.12.57.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1988" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.12.57.png" alt="" width="887" height="250" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.12.57.png 887w, https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.12.57-300x85.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2018/11/Captura-de-pantalla-2018-11-01-a-las-08.12.57-768x216.png 768w" sizes="auto, (max-width: 887px) 100vw, 887px" /></a></p>
<p>Si ahora logramos acceso y todo va bien, es decir, logramos conectarnos al servidor mysql, sería bueno saber si tenemos acceso a la base de datos que usará la aplicación.</p>
<p>Para eso, estando en la consola interactiva de mysql, escribimos el comando <b>use mibasededatos;</b> (donde mibasededatos es el nombre de la base de datos que está configurado en el archivo database.ini) seguido de punto y coma. Y presionamos enter.</p>
<p>Nos debe aparecer un mensaje como “database changed”.</p>
<p>Seleccionamos alguna de las tablas del sistema (podemos listarlas usando el comando <strong>show tables;</strong>), y escribimos alguna instrucción y le ejecutamos, por ejemplo;</p>
<pre class="  language-sql"><code class="  language-sql">&lt;span class=&quot;token keyword&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;FROM&lt;/span&gt; tablaseleccionada&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;</code></pre>
<p>Si todo ha ido bien, ya podemos pasar al siguiente punto.</p>
<h2><a id="base-datos-configuracion"></a>¿La cuenta en el servidor de bases de datos es la que corresponde en la configuración de nuestra aplicación?</h2>
<p>Bueno, en el punto anterior ya hemos realizado esta prueba usando el comando:</p>
<pre>mysql nombrebasedatos -u usuario -p</pre>
<p>Si esto no resulta, será necesario crear un usuario de mysql con los permisos necesarios sobre la base de datos correcta. Para eso te recomendamos leer el siguiente artículo que ya explica muy bien cómo lograr esta labor.</p>
<p><a href="https://www.digitalocean.com/community/tutorials/crear-un-nuevo-usuario-y-otorgarle-permisos-en-mysql-es">https://www.digitalocean.com/community/tutorials/crear-un-nuevo-usuario-y-otorgarle-permisos-en-mysql-es</a></p>
<h2><a id="base-datos-produccion"></a>¿Hemos trasladado todos los cambios desde el servidor de bases de datos de desarrollo hacia el servidor de producción?</h2>
<p>A veces el error se produce porque tenemos tablas en el servidor de desarrollo que no hemos pasado al servidor de producción o porque alguna de las tablas de producción no tiene atributos (campos) nuevos que sí hemos estado usando en desarrollo. Hacer una revisión de las estructuras de las tablas será de gran ayuda si comparas cómo es el estado en ambos servidores.</p>
<h2><a id="permisos-app"></a>¿Nuestra aplicación tiene los permisos bien configurados?</h2>
<p>Si hemos leído los artículos de la wiki, y hemos comprobado que los permisos son los correctos, sólo nos quedará pasar al siguiente punto.</p>
<h2><a id="ficheros-ocultos"></a>¿Hemos copiado completamente la aplicación desde el servidor de desarrollo (incluidos todos los archivos ocultos)?</h2>
<p>Por obvia que parezca la pregunta, resulta que en ocasiones el cliente que usamos para copiar los archivos, omite los archivos ocultos que comienzan en punto (los dot files). En KumbiaPHP se usan varios archivos que comienzan en punto, y aunque todos se llaman igual, cada uno cumple una misión diferente dependiendo del lugar en el que esté alojado. Este archivo es el .htaccess.</p>
<p>Personalmente la forma que más me resulta para lidiar con este problema es comprimir el sitio, copiarlo comprimido al servidor de producción y luego descomprimirlo en él. Si esto no fuera posible (porque por ejemplo no tienes acceso a la shell o si el panel web de administración no provee de gestión de archivos), toma en cuenta que el cliente de ftp que uses lleve todo lo que necesitas al servidor de producción.</p>
<h2><a id="configurar-path"></a>¿Hemos configurado correctamente la constante PUBLIC_PATH?</h2>
<p>Aunque también es parte de lo que se habla en los artículos escritos y mencionados de la wiki, uno de nuestros colegas ha escrito un artículo interesante sobre este tema y el siguiente en el blog de KumbiaPHP <a href="https://www.kumbiaphp.com/blog/2018/07/31/no-input-file-specified-arreglar-el-error/">https://www.kumbiaphp.com/blog/2018/07/31/no-input-file-specified-arreglar-el-error/</a></p>
<h2><a id="estrategia-url"></a>¿Podemos usar PATH_INFO o necesitamos cambiar la estrategia de generación de URL?</h2>
<p>Al igual que el punto anterior, nuestra recomendación es leer el artículo que ya se mencionó en él.</p>
<h2><a id="activar-errores"></a>Si estamos completamente a ciegas, ¿hemos activado la visualización de errores?</h2>
<p>Si el servidor no nos da información alguna sobre el error, podemos aprovechar una configuración especial que está alojada dentro del archivo <strong><i>default/public/index.php</i></strong> para activar el registro de los errores y permitir visualizarlos directamente en el navegador web.</p>
<p>Para eso iremos archivo mencionado (<strong>default/public/index.php</strong>) y buscaremos la línea:</p>
<pre><code class="language-php">//error_reporting(E_ALL ^ E_STRICT);ini_set(&#039;display_errors&#039;, &#039;On&#039;);</code></pre>
<p>Y le quitaremos los comentarios iniciales, es decir, los dos primeros caracteres iniciales <strong>//</strong></p>
<p>Adicionalmente debemos asegurarnos que KumbiaPHP no esté en modo producción, así que en el mismo archivo <strong><i>default/public/index.php </i></strong>verificamos que la constante PRODUCTION sea igual a false:</p>
<pre><code class="language-php">const PRODUCTION = false;</code></pre>
<p>Esto hará que las excepciones que ocurran sean mostradas en pantalla evitando la redirección a la página de error 404, que es comportamiento por defecto de KumbiaPHP cuando está en producción.</p>
<p>Con eso ya tendremos alguna idea a partir de la presentación de los errores en pantalla.</p>
<p>Existe una forma extra de visualizar errores, pero para ello hay que tener acceso al servidor en modo consola (shell) y tener acceso al log de errores del servidor web (apache generalmente). Normalmente este archivo se aloja en <strong><i>/var/log/apache2/error.log</i></strong></p>
<p>Si se tiene acceso a él, usar el comando <strong><i>tail -f error.log</i></strong> será de gran utilidad pues cada vez que recargues tu navegador, los errores se verán reflejados en tu terminal. Los mensajes que recibas serán de gran utilidad al momento de buscar posibles soluciones, o para pedir apoyo a algún colega.</p>
<h2><a id="app-too-many-redirects"></a>El sitio presenta un error ERR_TOO_MANY_REDIRECTS al cargarlo</h2>
<p>Si a pesar de haber eliminado los archivos de la caché este error persiste es momento de revisar nuestra rutina de autenticación. En ocasiones la implementación de la gestión de la sesión del usuario nos puede causar algunos dolores de cabeza, y el consejo aquí es verificar la forma en la cual se lleva a cabo las redirecciones cuando un usuario no tiene los privilegios necesarios y requiere de autenticación. Hay diferentes formas de llevar a cabo la autenticación, pero siempre vale la pena consultar alguna forma que ya haya sido probada. Para tales efectos les recomendamos leer <a href="http://wiki.kumbiaphp.com/Beta2_Sistema_de_Login" target="_blank" rel="noopener noreferrer">http://wiki.kumbiaphp.com/Beta2_Sistema_de_Login</a> o también <a href="https://soyprogramador.liz.mx/implementando-logueo-en-kumbiaphp/" target="_blank" rel="noopener noreferrer">https://soyprogramador.liz.mx/implementando-logueo-en-kumbiaphp/</a> como elementos formativos. Te dejamos como tarea extra mirar código de otras personas. Puedes hacer una búsqueda en <a href="https://github.com/search?q=kumbiaphp" target="_blank" rel="noopener noreferrer">github</a> con la palabra clave kumbiaphp.</p>
<h2>Una recomendación final</h2>
<p><em>Si hemos pasado de PRODUCCION = true a false y viceversa, es necesario recordar eliminar el contenido de la carpeta de cache que genera KumbiaPHP cuando estamos en modo producción. Para ello iremos a la carpeta default/app/temp/cache y borraremos su contenido para evitar que no logremos visualizar los errores porque el framework está presentando los contenidos “cacheados” en vez de las vistas reales.</em></p>
<p>Con todo esto, te deseamos lo mejor y mucho ánimo cuando te encuentres con un problema, pues recuerda que resolverlos es parte de nuestro aprendizaje y nuestra labor como desarrolladores.</p>
<p>Un abrazo cordial,</p>
<p>El equipo de KumbiaPHP</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2018/11/05/errores-comunes-al-subir-web-o-aplicacion-php-a-produccion/">Errores comunes al subir web o aplicación php a producción</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/2018/11/05/errores-comunes-al-subir-web-o-aplicacion-php-a-produccion/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1972</post-id>	</item>
	</channel>
</rss>
