<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-1805246100277841107</atom:id><lastBuildDate>Mon, 07 Sep 2026 15:51:29 +0000</lastBuildDate><category>Jquery</category><category>tutorial</category><category>PHP</category><category>javascript</category><category>Python</category><category>Python 3</category><category>C++</category><category>jquery mobile</category><category>laravel</category><category>ajax</category><category>curso</category><category>vídeotutorial</category><category>PyQt</category><category>yii</category><category>diseño web</category><category>html5</category><category>noticias</category><category>css3</category><category>yii2</category><category>internet</category><category>css</category><category>eventos</category><category>php7</category><category>PyQt5</category><category>bootstrap 3</category><category>google</category><category>html</category><category>jQuery Plugins</category><category>mysql</category><category>plugin</category><category>Bootstrap</category><category>json</category><category>tecnología</category><category>jQuery UI</category><category>android</category><category>clases</category><category>expresiones regulares</category><category>facebook</category><category>móvil</category><category>phonegap</category><category>Python3</category><category>SEO</category><category>animación</category><category>array</category><category>desarrollo web</category><category>efecto</category><category>framework</category><category>juegos</category><category>vídeo</category><category>youtube</category><category>POST</category><category>animate</category><category>animation</category><category>clase</category><category>class</category><category>consolas</category><category>cookies</category><category>effect</category><category>fopen</category><category>get</category><category>hackers</category><category>iOS</category><category>lessJS</category><category>nodeJS</category><category>photoshop</category><category>scroll</category><category>slider</category><category>svg</category><category>text</category><category>validate</category><category>vídeojuegos</category><category>Cannot modify header information</category><category>Catch</category><category>Errores</category><category>Exception</category><category>Math</category><category>PDO</category><category>PHPStorm</category><category>PI</category><category>QPolygonF</category><category>SQLMAP</category><category>Try</category><category>URL</category><category>Upload</category><category>Warning</category><category>Wordpress</category><category>XBOX</category><category>addClass</category><category>adobe</category><category>alertas</category><category>api</category><category>append</category><category>apple</category><category>archivos</category><category>asp .net</category><category>bing</category><category>blog</category><category>blur</category><category>botones</category><category>buscar</category><category>button</category><category>buttons</category><category>buttons group</category><category>captcha</category><category>caracter</category><category>carpetas</category><category>char_replace</category><category>checkbox</category><category>clearTimeout</category><category>click</category><category>color</category><category>composer</category><category>crear cookies</category><category>criptografía</category><category>crypto</category><category>date</category><category>descargar</category><category>directorio</category><category>directorios</category><category>dropdown</category><category>editor</category><category>enlaces</category><category>error 404</category><category>etiquetas</category><category>event</category><category>expresión regular</category><category>fadeIn</category><category>fadeOut</category><category>fclose</category><category>fecha</category><category>feof</category><category>fgets</category><category>firefox</category><category>floor</category><category>focus</category><category>fondos</category><category>form</category><category>formulario</category><category>free</category><category>fwrite</category><category>getElementsByClassName</category><category>getJSON</category><category>git</category><category>glyphicons</category><category>grupo de botones</category><category>hide</category><category>hojas de estilo</category><category>href</category><category>iPhone</category><category>iconos</category><category>icons</category><category>imagen</category><category>imagen error 404</category><category>include</category><category>input file</category><category>instalación</category><category>inyección sql</category><category>jQueryMobile</category><category>jQueryPlugins</category><category>js</category><category>keypress</category><category>keyup</category><category>lectura</category><category>libres</category><category>maquetación</category><category>match</category><category>md5</category><category>menú desplegable</category><category>microsoft</category><category>mkdir</category><category>mouseout</category><category>mouseover</category><category>multiple</category><category>mvc</category><category>netbeans</category><category>números</category><category>off</category><category>on</category><category>one</category><category>opendir</category><category>page not found</category><category>paginación</category><category>pagination</category><category>parseFloat</category><category>parseInt</category><category>perl</category><category>prepend</category><category>pulsar</category><category>página error 404</category><category>página no encontrada</category><category>radio</category><category>random</category><category>readdir</category><category>red social</category><category>redireccionar</category><category>reemplazar</category><category>refrescar</category><category>regular expression</category><category>reload</category><category>removeClass</category><category>require</category><category>resize</category><category>responsive</category><category>round</category><category>seguridad</category><category>select</category><category>setTimeout</category><category>sha1</category><category>sha2</category><category>sha3</category><category>show</category><category>slideDown</category><category>slideUp</category><category>solución</category><category>spinbox</category><category>spring</category><category>sql server</category><category>sqlite3</category><category>sqrt</category><category>str_replace</category><category>tablet</category><category>tecla</category><category>teclado</category><category>temas</category><category>textarea</category><category>texto</category><category>themes</category><category>toFixed</category><category>toggle</category><category>utilizar cookies</category><category>val</category><category>validation</category><category>webcam</category><category>xml</category><title>jQuery Manual</title><description>"jQuery está considerado como uno de los más importantes Frameworks de Javascript, escribe menos código y obtén más rendimiento."</description><link>http://jquery-manual.blogspot.com/</link><managingEditor>noreply@blogger.com (Unknown)</managingEditor><generator>Blogger</generator><openSearch:totalResults>846</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:keywords>jquery,php,css,html,html5,css3,javascript,python,perl</itunes:keywords><itunes:summary>En el blog de Jquery Manual puedes encontrar una gran variedad de ejemplos y tutoriales sobre las últimas tendencias tecnológicas web y programación.</itunes:summary><itunes:subtitle>Jquery Manual</itunes:subtitle><itunes:category text="Education"><itunes:category text="Language Courses"/></itunes:category><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-2915524849389761330</guid><pubDate>Thu, 01 Sep 2016 15:25:00 +0000</pubDate><atom:updated>2016-09-01T17:25:21.452+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">C++</category><title>Solventar error: Failure during conversion to COFF: file invalid or corrupt en Visual Studio C++ 2010</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Para solventar el siguiente error en Visual Studio C++ 2010: &lt;b&gt;&lt;i&gt;Failure during conversion to COFF: file invalid or corrupt&lt;/i&gt;&lt;/b&gt;. Diríjase al siguiente path en el caso de 64 bits:&amp;nbsp;&lt;i&gt;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin&lt;/i&gt;, en el caso de 32 bits: &lt;i&gt;C:\Program Files\Microsoft Visual Studio 10.0\VC\bin&lt;/i&gt;, en esta carpeta encontrará un archivo ejecutable llamado "&lt;b&gt;cvtres.exe&lt;/b&gt;", renombre este archivo con el siguiente "&lt;b&gt;cvtres1.exe&lt;/b&gt;", el problema quedará solventado y podrá compilar el proyecto sin ningún problema. Este problema se produce tras la intalación de&amp;nbsp;dotnetframework4.5.&lt;/div&gt;
&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2016/09/solventar-error-failure-during.html</link><author>noreply@blogger.com (Unknown)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-3228966273806938682</guid><pubDate>Sun, 17 Jan 2016 15:18:00 +0000</pubDate><atom:updated>2016-01-17T17:23:56.575+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">php7</category><title>9 - Tutorial de PHP7 - Operadores para Strings y Arrays</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/wB94DuQLb4g/0.jpg" src="https://www.youtube.com/embed/wB94DuQLb4g?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Bienvenid@s a un nuevo capítulo del &lt;b&gt;Tutorial de PHP7&lt;/b&gt; en cual continuamos con la referencia del lenguaje, concretamente con los operadores disponibles para Strings y Arrays.
  &lt;/div&gt;
&lt;div id="c0"&gt;
&lt;h3 style="text-align: justify;"&gt;
Referencia del Lenguaje - Operadores para Strings y Arrays&lt;/h3&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Operadores para Strings: &lt;/b&gt;Existen dos operadores para datos tipo string. El primero es el &lt;b&gt;operador de concatenación&lt;/b&gt; ('.'), el cual retorna el resultado de concatenar sus argumentos derecho e izquierdo. El segundo es el &lt;b&gt;operador de asignación sobre concatenación&lt;/b&gt; ('.='), el cual añade el argumento del lado derecho al argumento en el lado izquierdo.&lt;/div&gt;
&amp;nbsp; &lt;br /&gt;
&lt;hr /&gt;
&lt;b&gt;Operadores para Arrays:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table border="1" cellpadding="5"&gt;
    &lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Ejemplo&lt;/th&gt;&lt;th&gt;Nombre&lt;/th&gt;&lt;th&gt;Resultado&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;
    &lt;td&gt;$a + $b&lt;/td&gt;
    &lt;td&gt;Unión&lt;/td&gt;
    &lt;td&gt;Unión de $a y $b.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
    &lt;td&gt;$a == $b&lt;/td&gt;
    &lt;td&gt;Igualdad&lt;/td&gt;
    &lt;td&gt;TRUE si $a y $b tienen las mismas parejas clave/valor.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
    &lt;td&gt;$a === $b&lt;/td&gt;
    &lt;td&gt;Idéntico&lt;/td&gt;
    &lt;td&gt;TRUE si $a y $b tienen las mismas parejas clave/valor en el mismo orden y de los mismos tipos.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
    &lt;td&gt;$a != $b&lt;/td&gt;
    &lt;td&gt;Desigualdad&lt;/td&gt;
    &lt;td&gt;TRUE si $a no es igual a $b.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
    &lt;td&gt;$a &amp;lt;&amp;gt; $b&lt;/td&gt;
    &lt;td&gt;Desigualdad&lt;/td&gt;
    &lt;td&gt;TRUE si $a no es igual a $b.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
    &lt;td&gt;$a !== $b&lt;/td&gt;
    &lt;td&gt;No idéntico&lt;/td&gt;
    &lt;td&gt;TRUE si $a no es idéntica a $b.&lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Código del script del capítulo &lt;i&gt;operadores-strings-arrays.php&lt;/i&gt; ...&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;?php 
//Strings. Operador de concatenación '.'
$string1 = 'Hola ';
$string2 = $string1 . 'mundo';
echo '&amp;lt;p&amp;gt;' . $string2 . '&amp;lt;/p&amp;gt;';

//Precedencia
$string3 = 'La suma total de 2+2 = ' . (2+2);
echo '&amp;lt;p&amp;gt;' . $string3 . '&amp;lt;/p&amp;gt;';

//Operador de asignación sobre concatenación '.='
$string4 = 'político ';
$string4 .= 'corrupto ';
$string4 .= 'y ladrón';
echo '&amp;lt;p&amp;gt;' . $string4 . '&amp;lt;/p&amp;gt;';

//Comparar arrays
$a = [0, 1, 2];
$b = ['0', '1', '2'];

//Operador de igualdad: TRUE si $a y $b tienen las mismas parejas clave/valor
echo '&amp;lt;p&amp;gt;Operador de igualdad ==&amp;lt;/p&amp;gt;';
var_dump($a == $b);

/* 
Operador de idéntico: TRUE si $a y $b tienen las mismas parejas clave/valor en el mismo
orden y de los mismos tipos
*/
echo '&amp;lt;p&amp;gt;Operador de idéntico ===&amp;lt;/p&amp;gt;';
var_dump($a === $b);

//Operador de desigualdad: TRUE si $a no es igual a $b 
echo '&amp;lt;p&amp;gt;Operador de desigualdad != &amp;amp;lt;&amp;amp;gt;&amp;lt;/p&amp;gt;';
var_dump([0, 1, 2] != ['0', '1', '2']);

&lt;/pre&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTT68_dQSbbw24jRmdCEaq11017rHbhLLd033jWCbJ77zIhlDVXA-HIZFXTHgq-8IXw-BuZJkApcdhRAbub1hdV2u1zCz30BgRQcHpZ5yOHgxOoAIRfHuZfTq6nuL-FoG1BYfxAJHArQk/s1600/php7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTT68_dQSbbw24jRmdCEaq11017rHbhLLd033jWCbJ77zIhlDVXA-HIZFXTHgq-8IXw-BuZJkApcdhRAbub1hdV2u1zCz30BgRQcHpZ5yOHgxOoAIRfHuZfTq6nuL-FoG1BYfxAJHArQk/s1600/php7.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2016/01/9-tutorial-de-php7-operadores-para.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/wB94DuQLb4g/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-3010423676102072428</guid><pubDate>Fri, 15 Jan 2016 18:16:00 +0000</pubDate><atom:updated>2016-01-15T20:01:43.179+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">php7</category><title>8 - Tutorial de PHP7 - Operadores de ejecución (shell) y archivos .ini</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/nHSB3maK5Ig/0.jpg" src="https://www.youtube.com/embed/nHSB3maK5Ig?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Bienvenid@s, en este capítulo del &lt;b&gt;Tutorial de PHP7&lt;/b&gt; continuamos con la referencia del lenguaje, concretamente con los &lt;b&gt;operadores de ejecución&lt;/b&gt; (comando de shell) y veremos como iniciar php con un archivo de configuración &lt;b&gt;.ini.&lt;/b&gt;
&lt;/div&gt;
&lt;div id="c0"&gt;
&lt;h3 style="text-align: justify;"&gt;
Referencia del Lenguaje - Operadores de ejecución (shell) y archivos .ini&lt;/h3&gt;
&lt;div style="text-align: justify;"&gt;
PHP soporta un operador de ejecución: las comillas invertidas (``). 
   PHP intentará ejecutar el contenido entre las comillas invertidas como si se tratara de un comando del shell; 
   la salida será retornada (es decir, no será simplemente volcada como salida; puede ser asignada a una variable). 
   El uso del operador de comillas invertidas es idéntico al de la función shell_exec().&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp; &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Nota:&lt;/b&gt; El operador de comillas invertidas se deshabilita cuando modo seguro esta activado o shell_exec() está desactivado.&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp; &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Archivos .ini:&lt;/b&gt; php.ini es leído por php al arrancar, en él se encuentran una serie de directivas que controlan el uso de php.&lt;/div&gt;
&lt;h3&gt;
Objetivo del capítulo&lt;/h3&gt;
&lt;div style="text-align: justify;"&gt;
- Crear una carpeta a través de una shell&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp; &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
- Eliminar esta misma carpeta&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp; &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
- Abrir un programa como por ejemplo notepad.exe&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
- Veremos un ejemplo de como desactivar funciones en el archivo .ini de desarrollo (php.ini-development), desactivaremos la función &lt;b&gt;shell_exec()&lt;/b&gt; en la directiva &lt;b&gt;disable_functions&lt;/b&gt;, importante, reiniciar el servidor de desarrollo con el argumento &lt;i&gt;-c [ruta-de-archivo-ini]&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Código del script del capítulo &lt;i&gt;operadores-ejecucion.php&lt;/i&gt; ...&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;?php 
//$output = `mkdir hola`; //Crear carpeta
//$output = `rmdir hola`; //Eliminar carpeta
//$output = `notepad.exe`; //Ejecutar un programa
$output = shell_exec("notepad.exe"); //shell_exec función equivalente al operador de ejecución ``
echo $output;
&lt;/pre&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTT68_dQSbbw24jRmdCEaq11017rHbhLLd033jWCbJ77zIhlDVXA-HIZFXTHgq-8IXw-BuZJkApcdhRAbub1hdV2u1zCz30BgRQcHpZ5yOHgxOoAIRfHuZfTq6nuL-FoG1BYfxAJHArQk/s1600/php7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTT68_dQSbbw24jRmdCEaq11017rHbhLLd033jWCbJ77zIhlDVXA-HIZFXTHgq-8IXw-BuZJkApcdhRAbub1hdV2u1zCz30BgRQcHpZ5yOHgxOoAIRfHuZfTq6nuL-FoG1BYfxAJHArQk/s320/php7.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2016/01/8-tutorial-de-php7-operadores-de.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/nHSB3maK5Ig/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-6753313084671456759</guid><pubDate>Fri, 15 Jan 2016 15:42:00 +0000</pubDate><atom:updated>2016-01-15T16:50:50.456+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">php7</category><title>7 - Tutorial de PHP7 - Operadores Lógicos</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/RWASDef1Ne8/0.jpg" src="https://www.youtube.com/embed/RWASDef1Ne8?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Bienvenid@s, en este capítulo del &lt;i&gt;&lt;b&gt;Tutorial de PHP7&lt;/b&gt;&lt;/i&gt; continuamos con la referencia del lenguaje, concretamente con los &lt;i&gt;&lt;b&gt;Operadores Lógicos&lt;/b&gt;&lt;/i&gt;.&lt;/div&gt;
&lt;div id="main" index="0"&gt;
&lt;h3 style="text-align: justify;"&gt;
Referencia del Lenguaje - Operadores lógicos&lt;/h3&gt;
&lt;div style="text-align: justify;"&gt;
Los operadores lógicos sirven para combinar condiciones. Los operadores lógicos disponibles en PHP son:&lt;/div&gt;
&amp;nbsp; &lt;br /&gt;
&lt;table border="1" cellpadding="5"&gt;
    &lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Ejemplo&lt;/th&gt;&lt;th&gt;Nombre&lt;/th&gt;&lt;th&gt;Resultado&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;$a and $b&lt;/td&gt;
     &lt;td&gt;And (y)&lt;/td&gt;
     &lt;td&gt;TRUE si tanto $a como $b son TRUE.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;$a or $b&lt;/td&gt;
     &lt;td&gt;Or (o inclusivo)&lt;/td&gt;
     &lt;td&gt;TRUE si cualquiera de $a o $b es TRUE.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;$a xor $b&lt;/td&gt;
     &lt;td&gt;Xor (o exclusivo)&lt;/td&gt;
     &lt;td&gt;TRUE si $a o $b es TRUE, pero no ambos.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;!$a&lt;/td&gt;
     &lt;td&gt;Not (no)&lt;/td&gt;
     &lt;td&gt;TRUE si $a no es TRUE.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;$a &amp;amp;&amp;amp; $b&lt;/td&gt;
     &lt;td&gt;And (y)&lt;/td&gt;
     &lt;td&gt;TRUE si tanto $a como $b son TRUE.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;$a || $b&lt;/td&gt;
     &lt;td&gt;Or (o inclusivo)&lt;/td&gt;
     &lt;td&gt;TRUE si cualquiera de $a o $b es TRUE.&lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Código del script del capítulo &lt;i&gt;operadores-logicos.php&lt;/i&gt; ...
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;?php 
$var1 = 10;
$var2 = 10;
$var3 = 5;
$var4 = 5;

/* AND (y) - true si todas las condiciones son verdaderas */
echo '&amp;lt;p&amp;gt;Supuesto 1. Operadores: and &amp;amp;&amp;amp;&amp;lt;/p&amp;gt;';
var_dump($var1 == $var2 &amp;amp;&amp;amp; $var3 == $var4);

/* OR (o inclusivo) - true si cualquiera de las condiciones es verdadera */
echo '&amp;lt;p&amp;gt;Supuesto 2. Operadores: or ||&amp;lt;/p&amp;gt;';
var_dump($var1 &amp;gt; $var2 || $var3 == $var4);

/* XOR (o exclusivo) - true si sólo una de las condiciones es verdadera */
echo '&amp;lt;p&amp;gt;Supuesto 3. Operador: xor&amp;lt;/p&amp;gt;';
var_dump($var1 &amp;lt; $var2 xor $var3 == $var4);

/* NOT - true si la condición no es verdadera */
echo '&amp;lt;p&amp;gt;Supuesto 4. Operador: !&amp;lt;/p&amp;gt;';
var_dump(!($var1 &amp;gt; $var2));

&lt;/pre&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTT68_dQSbbw24jRmdCEaq11017rHbhLLd033jWCbJ77zIhlDVXA-HIZFXTHgq-8IXw-BuZJkApcdhRAbub1hdV2u1zCz30BgRQcHpZ5yOHgxOoAIRfHuZfTq6nuL-FoG1BYfxAJHArQk/s1600/php7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTT68_dQSbbw24jRmdCEaq11017rHbhLLd033jWCbJ77zIhlDVXA-HIZFXTHgq-8IXw-BuZJkApcdhRAbub1hdV2u1zCz30BgRQcHpZ5yOHgxOoAIRfHuZfTq6nuL-FoG1BYfxAJHArQk/s320/php7.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2016/01/7-tutorial-de-php7-operadores-logicos.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/RWASDef1Ne8/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-240504179701507212</guid><pubDate>Tue, 12 Jan 2016 16:56:00 +0000</pubDate><atom:updated>2016-01-12T19:25:45.741+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">php7</category><title>6 - Tutorial de PHP7 - Operadores de Comparación</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/9Gv3ZSRqauQ/0.jpg" src="https://www.youtube.com/embed/9Gv3ZSRqauQ?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
En esta parte del &lt;b&gt;Tutorial de PHP7&lt;/b&gt; continuamos con la referencia del lenguaje, concretamente con los &lt;i&gt;&lt;b&gt;operadores de comparación&lt;/b&gt;&lt;/i&gt;, prestando especial atención a los dos nuevos operadores disponibles desde PHP 7, los operadores: &lt;i&gt;&lt;b&gt;nave espacial y fusión de null&lt;/b&gt;&lt;/i&gt;.&lt;/div&gt;
&lt;div id="c0"&gt;
&lt;h3&gt;
Referencia del Lenguaje - Operadores de comparación&lt;/h3&gt;
&lt;div style="text-align: justify;"&gt;
Los operadores de comparación, como su nombre lo indica, permiten comparar dos valores. Los operadores de comparación disponibles en PHP son:&lt;/div&gt;
&amp;nbsp; &lt;br /&gt;
&lt;table border="1" cellpadding="5"&gt;
    &lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Ejemplo&lt;/th&gt;&lt;th&gt;Nombre&lt;/th&gt;&lt;th&gt;Resultado&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;$a == $b&lt;/td&gt;
     &lt;td&gt;Igual&lt;/td&gt;
     &lt;td&gt;TRUE si $a es igual a $b después de la manipulación de tipos.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;$a === $b&lt;/td&gt;
     &lt;td&gt;Idéntico&lt;/td&gt;
     &lt;td&gt;TRUE si $a es igual a $b, y son del mismo tipo.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;$a != $b&lt;/td&gt;
     &lt;td&gt;Diferente&lt;/td&gt;
     &lt;td&gt;TRUE si $a no es igual a $b después de la manipulación de tipos.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;$a &amp;lt;&amp;gt; $b&lt;/td&gt;
     &lt;td&gt;Diferente&lt;/td&gt;
     &lt;td&gt;TRUE si $a no es igual a $b después de la manipulación de tipos.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;$a !== $b&lt;/td&gt;
     &lt;td&gt;No idéntico&lt;/td&gt;
     &lt;td&gt;TRUE si $a no es igual a $b, o si no son del mismo tipo. &lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;$a &amp;lt; $b&lt;/td&gt;
     &lt;td&gt;Menor que&lt;/td&gt;
     &lt;td&gt;TRUE si $a es estrictamente menor que $b.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;$a &amp;gt; $b&lt;/td&gt;
     &lt;td&gt;Mayor que&lt;/td&gt;
     &lt;td&gt;TRUE si $a es estrictamente mayor que $b.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;$a &amp;lt;= $b&lt;/td&gt;
     &lt;td&gt;Menor o igual que&lt;/td&gt;
     &lt;td&gt;TRUE si $a es menor o igual que $b.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;$a &amp;gt;= $b&lt;/td&gt;
     &lt;td&gt;Mayor o igual que&lt;/td&gt;
     &lt;td&gt;TRUE si $a es mayor o igual que $b.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;$a &amp;lt;=&amp;gt; $b&lt;/td&gt;
     &lt;td&gt;Nave espacial&lt;/td&gt;
     &lt;td&gt;Un integer menor que, igual a, o mayor que cero cuando $a es respectivamente menor que, igual a, o mayor que $b. Disponible a partir de PHP 7.&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
     &lt;td&gt;$a ?? $b ?? $c&lt;/td&gt;
     &lt;td&gt;Fusión de null&lt;/td&gt;
     &lt;td&gt;El primer operando de izquierda a derecha que exista y no sea NULL. NULL si no hay valores definidos y no son NULL. Disponible a partir de PHP 7.&lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
El código del script del capítulo &lt;i&gt;operadores-comparacion.php&lt;/i&gt; ...
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;?php 
$numero1 = 2;
$numero2 = '2';

echo '&amp;lt;p&amp;gt;Supuesto 1. igual ==.&amp;lt;/p&amp;gt;';
var_dump($numero1 == $numero2);

echo '&amp;lt;p&amp;gt;Supuesto 2. idéntico ===.&amp;lt;/p&amp;gt;';
var_dump($numero1 === $numero2);

echo '&amp;lt;p&amp;gt;Supuesto 3. diferente != ó &amp;lt;&amp;gt;&amp;lt;/p&amp;gt;';
var_dump(3 &amp;lt;&amp;gt; 2);

echo '&amp;lt;p&amp;gt;Supuesto 4. menor que &amp;lt;&amp;lt;/p&amp;gt;';
var_dump(3 &amp;lt; 2);

echo '&amp;lt;p&amp;gt;Supuesto 5. menor ó igual que. &amp;lt;=&amp;lt;/p&amp;gt;';
var_dump(1 &amp;lt;= 2);

echo '&amp;lt;p&amp;gt;Supuesto 6. Nave espacial &amp;lt;=&amp;gt;.&amp;lt;/p&amp;gt;';
$a = 0;
$b = 1;
echo '&amp;lt;p&amp;gt;Si $a es menor que $b regresa -1. Si $a es igual a $b regresa 0. Si $a es mayor que $b regresa 1&amp;lt;/p&amp;gt;';
var_dump($a &amp;lt;=&amp;gt; $b);

echo '&amp;lt;p&amp;gt;Supuesto 7. Fusión de null.&amp;lt;/p&amp;gt;';
$e = 'hola soy e';
$c = $d ?? $e ?? 'nada';
var_dump($c);


&lt;/pre&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTT68_dQSbbw24jRmdCEaq11017rHbhLLd033jWCbJ77zIhlDVXA-HIZFXTHgq-8IXw-BuZJkApcdhRAbub1hdV2u1zCz30BgRQcHpZ5yOHgxOoAIRfHuZfTq6nuL-FoG1BYfxAJHArQk/s1600/php7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTT68_dQSbbw24jRmdCEaq11017rHbhLLd033jWCbJ77zIhlDVXA-HIZFXTHgq-8IXw-BuZJkApcdhRAbub1hdV2u1zCz30BgRQcHpZ5yOHgxOoAIRfHuZfTq6nuL-FoG1BYfxAJHArQk/s320/php7.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2016/01/5-tutorial-de-php7-operadores-de.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/9Gv3ZSRqauQ/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-8286806714403430734</guid><pubDate>Fri, 01 Jan 2016 17:51:00 +0000</pubDate><atom:updated>2016-01-01T20:30:37.572+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">php7</category><title>5 - Tutorial de PHP7 - Operadores Aritméticos</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/XUGOyDiEEIg/0.jpg" src="https://www.youtube.com/embed/XUGOyDiEEIg?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Bienvenid@s, en este capítulo del &lt;i&gt;&lt;b&gt;Tutorial de PHP7&lt;/b&gt;&lt;/i&gt; continuamos con la referencia del lenguaje, concretamente con los &lt;i&gt;&lt;b&gt;Operadores Aritméticos&lt;/b&gt;&lt;/i&gt; y la precedencia de los operadores.&lt;/div&gt;
&lt;div id="c0"&gt;
&lt;h3&gt;
Referencia del Lenguaje - Operadores aritméticos&lt;/h3&gt;
&lt;div style="text-align: justify;"&gt;
Los operadores aritméticos permiten realizar operaciones matemáticas. Los operadores aritméticos disponibles en PHP son:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Negación&lt;/b&gt;: Números negativos. Ejemplo: &lt;span style="color: yellow; font-weight: bold;"&gt;-$a&lt;/span&gt; | Resultado: opuesto de $a&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Adicción&lt;/b&gt;: Sumar números. Ejemplo: &lt;span style="color: yellow; font-weight: bold;"&gt;$a + $b&lt;/span&gt; | Resultado: suma de $a y $b&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Sustracción&lt;/b&gt;: Restar números. Ejemplo: &lt;span style="color: yellow; font-weight: bold;"&gt;$a - $b&lt;/span&gt; | Resultado: diferencia de $a y $b&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Multiplicación&lt;/b&gt;: Multiplicar números. Ejemplo: &lt;span style="color: yellow; font-weight: bold;"&gt;$a * $b&lt;/span&gt; | Resultado: producto de $a y $b&lt;/li&gt;
&lt;li&gt;&lt;b&gt;División&lt;/b&gt;: Dividir números. Ejemplo: &lt;span style="color: yellow; font-weight: bold;"&gt;$a / $b&lt;/span&gt; | Resultado: cociente de $a y $b&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Módulo&lt;/b&gt;: Resto de una división. Ejemplo: &lt;span style="color: yellow; font-weight: bold;"&gt;$a % $b&lt;/span&gt; | Resultado: resto de $a divido por $b&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Exponenciación &lt;small&gt;(disponible desde PHP 5.6)&lt;/small&gt;&lt;/b&gt;: Elevar un número a una potencia dada. Ejemplo: &lt;span style="color: yellow; font-weight: bold;"&gt;$a ** $b&lt;/span&gt; | Resultado: resultado de elevar $a a la potencia $b.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Precedencia de los operadores&lt;/h3&gt;
&lt;div style="text-align: justify;"&gt;
Los valores se calcularán de izquierda a derecha y de acuerdo a la precedencia de los operadores. Precedencia de los operadores: &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;1 - Exponenciación &lt;b&gt;**&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;2 - Multiplicación &lt;b&gt;*&lt;/b&gt; y división &lt;b&gt;/&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;3 - Suma &lt;b&gt;+&lt;/b&gt; y resta &lt;b&gt;-&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: justify;"&gt;
Para forzar la precedencia de un operador se utilizarán los paréntesis (), no es lo misma la operación 3 + 3 * 3 = 12 que (3 + 3) * 3 = 18&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Código del script &lt;i&gt;operadores-aritmeticos.php&lt;/i&gt; del capítulo:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;?php 
$sumar = 2 + 2;
echo "&amp;lt;p&amp;gt;La suma de 2 + 2 es igual a " . $sumar . "&amp;lt;/p&amp;gt;";
$restar = 4 - 3;
echo "&amp;lt;p&amp;gt;La resta de 4 - 3 es igual a " . $restar . "&amp;lt;/p&amp;gt;";
$negativos = -20 + -20;
echo "&amp;lt;p&amp;gt;La suma de -20 + -20 es igual a " . $negativos . "&amp;lt;/p&amp;gt;";
$string = "12.4";
$sumar = 3 + $string;
echo "&amp;lt;p&amp;gt;La suma de 3 + $string es igual a " . $sumar . "&amp;lt;/p&amp;gt;";
echo "&amp;lt;p&amp;gt;Voy a sumar números en esta salida de datos " . (4+4) . "&amp;lt;/p&amp;gt;";
$dividir = 4 / 2;
echo "&amp;lt;p&amp;gt;La división de 4 / 2 es igual a " . $dividir . "&amp;lt;/p&amp;gt;";
$multiplicar = 3 * 3;
echo "&amp;lt;p&amp;gt;La multiplicación de 3 * 3 es igual a " . $multiplicar . "&amp;lt;/p&amp;gt;";
$resto = 3 % 2;
echo "&amp;lt;p&amp;gt;El resto de la división de 3 / 2 es igual a " . $resto . "&amp;lt;/p&amp;gt;";
$exponente = 2 ** 3;
echo "&amp;lt;p&amp;gt;Resultado de 2 elevado al cubo " . $exponente . "&amp;lt;/p&amp;gt;";
$precedencia = 3 + 3 * 3;
echo "&amp;lt;p&amp;gt;3 + 3 * 3 = " . $precedencia . "&amp;lt;/p&amp;gt;";
$precedencia = (3 + 3) * 3;
echo "&amp;lt;p&amp;gt;(3 + 3) * 3 = " . $precedencia . "&amp;lt;/p&amp;gt;";


&lt;/pre&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTT68_dQSbbw24jRmdCEaq11017rHbhLLd033jWCbJ77zIhlDVXA-HIZFXTHgq-8IXw-BuZJkApcdhRAbub1hdV2u1zCz30BgRQcHpZ5yOHgxOoAIRfHuZfTq6nuL-FoG1BYfxAJHArQk/s1600/php7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTT68_dQSbbw24jRmdCEaq11017rHbhLLd033jWCbJ77zIhlDVXA-HIZFXTHgq-8IXw-BuZJkApcdhRAbub1hdV2u1zCz30BgRQcHpZ5yOHgxOoAIRfHuZfTq6nuL-FoG1BYfxAJHArQk/s320/php7.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2016/01/5-tutorial-de-php7-operadores.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/XUGOyDiEEIg/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-9052980711718585698</guid><pubDate>Thu, 31 Dec 2015 16:01:00 +0000</pubDate><atom:updated>2015-12-31T17:27:36.146+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">php7</category><title>4 - Tutorial de PHP7 - Arrays</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/Nhqt6WKrx4g/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/Nhqt6WKrx4g?feature=player_embedded" width="320"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Bienvenid@s, en este capítulo del &lt;i&gt;&lt;b&gt;Tutorial de PHP7&lt;/b&gt;&lt;/i&gt; continuamos con la referencia del lenguaje, concretamente con los tipos de datos compuestos &lt;b&gt;Arrays&lt;/b&gt; y el tipo de datos especial &lt;b&gt;NULL&lt;/b&gt;.&lt;/div&gt;
&lt;div id="c0" style="text-align: justify;"&gt;
&lt;h3&gt;
Referencia del Lenguaje - Tipo de datos compuestos: Arrays | tipo de datos especiales: NULL&lt;/h3&gt;
&lt;b&gt;Definición de Array&lt;/b&gt;:  Un array en PHP es en realidad un mapa ordenado. Un mapa es un tipo de datos que asocia valores con claves. Este tipo se optimiza para varios usos diferentes; se puede emplear como un array, lista (vector), tabla asociativa (tabla hash - una implementación de un mapa), diccionario, colección, pila, cola, y posiblemente más. Ya que los valores de un array pueden ser otros arrays, también son posibles árboles y arrays multidimensionales.&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;b&gt;Definición de NULL&lt;/b&gt;:  El valor especial NULL representa una variable sin valor. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Modos de crear arrays:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Un array puede ser creado con el constructor del lenguaje &lt;b&gt;array()&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;A partir de PHP 5.4 también se puede usar la sintaxis de array corta, la cual reemplaza el constructor del lenguaje array() con los corchetes &lt;b&gt;[]&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Tipos de arrays que se practicarán:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Arrays unidimensionales&lt;/b&gt;: array que contiene como elementos valores unidimensionales como por ejemplo los tipos de datos escalares.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Arrays multidimensionales (árbol)&lt;/b&gt;: array que contiene como elementos otros arrays, este tipo de arrays también pueden contener elementos unidimensionales.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Arrays asociativos&lt;/b&gt;: array cuyos elementos son asociados a través de una clave, la clave se asocia al valor del elemento, la clave puede ser del tipo integer ó string.&lt;/li&gt;
&lt;/ul&gt;
Funciones optimas para imprimir el contenido de un array: &lt;b&gt;var_dump($array)&lt;/b&gt; y &lt;b&gt;print_r($array)&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Código de ejemplo del script &lt;i&gt;arrays.php&lt;/i&gt; del capítulo:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;?php 
//Variable sin valor
$variable = null;

//Arrays unidimensionales, arrays indexados
//Array con el constructor del lenguaje array()
$array_1 = array(1, 2, 3, 4, 5, "string", 3.14, true, "más elementos");
//Array con la sintaxis corta []
$array_2 = [1, 2, 3, 4, 5];

//Mostrar información del array
var_dump($array_1);

echo "&amp;lt;p&amp;gt;Accediendo al primer elemento del array_1: " . $array_1[0] . "&amp;lt;/p&amp;gt;";
echo "&amp;lt;p&amp;gt;Accediendo al elemento con index 5 en array_1: " . $array_1[5] . "&amp;lt;/p&amp;gt;";
echo "&amp;lt;p&amp;gt;Total de elementos del array_2: " . count($array_2) . "&amp;lt;/p&amp;gt;";

//Cambiar valor de un elemento del array en tiempo de ejecución
$array_2[1] = 'Me has cambiado de valor';
echo "&amp;lt;p&amp;gt;Accediendo al elemento con index 1 en array_2: " . $array_2[1] . "&amp;lt;/p&amp;gt;";

//Arrays multidimensionales, entre sus elementos se encuentran otros arrays
$array_3 = ['uno', 2, ['tres', 'cuatro', [5, 6]], $array_2];

//Mostrar información del array
var_dump($array_3);
//Acceso a valores de elementos de arrays multidimensionales
echo "&amp;lt;p&amp;gt;" . $array_3[2][1] . "&amp;lt;/p&amp;gt;";
echo "&amp;lt;p&amp;gt;" . $array_3[2][2][1] . "&amp;lt;/p&amp;gt;";
echo "&amp;lt;p&amp;gt;" . $array_3[3][4] . "&amp;lt;/p&amp;gt;";

/* Arrays asociativos, no indexados, se accede a los elementos a través de una clave que se asocia a un determinado valor */
$array_4 = ['uno' =&amp;gt; 1, 'dos' =&amp;gt; 2, 3 =&amp;gt; 'hola', 'array' =&amp;gt; $array_2, 'array1' =&amp;gt; ['uno', 'dos']];
var_dump($array_4);
echo "&amp;lt;p&amp;gt;Accediendo al segundo elemento del array_4: " . $array_4['dos'] . "&amp;lt;/p&amp;gt;";
echo "&amp;lt;p&amp;gt;Accediendo al tercer elemento del array_4: " . $array_4[3] . "&amp;lt;/p&amp;gt;";
$array_4[3] = 'cambiando de valor';
echo "&amp;lt;p&amp;gt;Accediendo al tercer elemento del array_4: " . $array_4[3] . "&amp;lt;/p&amp;gt;";

echo "&amp;lt;p&amp;gt;" . $array_4['array'][0] . "&amp;lt;/p&amp;gt;";

&lt;/pre&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTT68_dQSbbw24jRmdCEaq11017rHbhLLd033jWCbJ77zIhlDVXA-HIZFXTHgq-8IXw-BuZJkApcdhRAbub1hdV2u1zCz30BgRQcHpZ5yOHgxOoAIRfHuZfTq6nuL-FoG1BYfxAJHArQk/w140-h94-p/php7.jpg" /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/12/4-tutorial-de-php7-arrays.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/Nhqt6WKrx4g/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-6781415157500392768</guid><pubDate>Tue, 29 Dec 2015 18:17:00 +0000</pubDate><atom:updated>2015-12-29T20:06:33.870+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">php7</category><title>3 - Tutorial de PHP7 - Variables, constantes y Tipo de datos escalares</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/wS8KXwgx6K8/0.jpg" src="https://www.youtube.com/embed/wS8KXwgx6K8?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Bienvenid@s, en este capítulo del &lt;b&gt;Tutorial de PHP7&lt;/b&gt; continuamos con la referencia del lenguaje, veremos como crear variables y constantes y asignarle valores del tipo de datos escalar. También veremos la principal diferencia entre comillas simples y dobles y la concatenación (unión de strings).&lt;/div&gt;
&lt;div id="c0"&gt;
&lt;h3 style="text-align: justify;"&gt;
Referencia del Lenguaje - Variables, constantes y Tipo de datos escalares:&lt;/h3&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Definición de variable&lt;/b&gt;: En programación, una variable está formada por un espacio en el sistema de almacenaje (memoria principal de un ordenador) y un nombre simbólico (un identificador) que está asociado a dicho espacio. Ese espacio contiene una cantidad o información conocida o desconocida, es decir un valor. Su principal diferencia respecto a una constante es que ésta puede modificar su valor a lo largo de la ejecución del programa.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp; &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Definición de constante&lt;/b&gt;: En programación, una constante consta de un identificador y un valor que no puede ser alterado/modificado durante la ejecución de un programa, únicamente puede ser leído. Una constante corresponde a una longitud fija de un área reservada en la memoria principal del ordenador, donde el programa almacena valores fijos.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp; &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Definición de Tipo de datos escalar&lt;/b&gt;: Un tipo de dato escalar puede ser una variable o una constante que contiene un dato unidimensional.
   En PHP El tipo de una variable ó constante usualmente no lo declara el programador; al contrario, es decidido en tiempo de ejecución por PHP dependiendo del contexto en el que se emplea dicha variable. 
   &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;&lt;b&gt;Tipos de datos escalares&lt;/b&gt;&lt;/i&gt;:
   &lt;ul&gt;
&lt;li&gt;&lt;b&gt;Booleanos&lt;/b&gt;: Puede tener uno de los dos siguientes valores: true (verdadero) ó false (falso). Este tipo de datos es normalmente pasado a una estructura de control.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Integer&lt;/b&gt;: Números enteros&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Float&lt;/b&gt;: Números de punto flotante&lt;/li&gt;
&lt;li&gt;&lt;b&gt;String&lt;/b&gt;: Cadenas de texto&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Para crear una variable utilizaremos en el identificador como primer carácter el signo de dollar &lt;b&gt;$&lt;/b&gt;, a continuación el carácter que le puede preceder puede ser una letra ó un guión bajo.
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;$variable = 1; //Correcto
$_variable = 2; //Correcto
$_variable_ = "hola"; //Correcto
$_variable_1 = 3.11; //Correcto
$1variable = true; //Incorrecto
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;La principal diferencia entre comillas simples y dobles&lt;/b&gt;. Si incluimos el identificador entre comillas dobles al realizar la salida de datos se mostrará el valor de la variable, entre comillas simples se mostrará el identificador. Por ejemplo ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;$integer = 2;
echo "&amp;lt;p&amp;gt;$integer&amp;lt;/p&amp;gt;"; //Se mostrará 2
echo '&amp;lt;p&amp;gt;$integer&amp;lt;/p&amp;gt;'; //Se mostrará $integer
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;La concatenación&lt;/b&gt;. La concatenación consiste en la unión de strings, en PHP la concatenación la haremos separando cada string con un punto ".", es válido para comillas simples y dobles. Ejemplo ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;$variable1 = "hola";
$variable2 = 4;
echo '&amp;lt;p&amp;gt;' . $variable1 . '&amp;lt;/p&amp;gt;' . '&amp;lt;p&amp;gt;' . $variable2 . '&amp;lt;/p&amp;gt;';
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
A continuación podéis ver el código del script del capítulo &lt;i&gt;variables-constantes.php&lt;/i&gt;:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;?php 

/* Variables */
$boolean = true;
$integer = 20;
$float = -45.12;
$string_1 = "String entre comillas dobles";
$string_2 = 'String entre comillas simples';

echo "&amp;lt;p&amp;gt;" . $boolean . "&amp;lt;/p&amp;gt;" . "&amp;lt;strong&amp;gt;Valor boolean&amp;lt;/strong&amp;gt;";
echo '&amp;lt;p&amp;gt;' . $integer . '&amp;lt;/p&amp;gt;';
echo "&amp;lt;p&amp;gt;$float&amp;lt;/p&amp;gt;";
echo "&amp;lt;p&amp;gt;$string_1&amp;lt;/p&amp;gt;";
echo "&amp;lt;p&amp;gt;$string_2&amp;lt;/p&amp;gt;";

$integer = 3;
echo "&amp;lt;p&amp;gt;$integer&amp;lt;/p&amp;gt;";

/* Constantes */
define("pi", 3.14);
echo "&amp;lt;p&amp;gt;" . pi . "&amp;lt;/p&amp;gt;";

define("pi", 2);
echo "&amp;lt;p&amp;gt;" . pi . "&amp;lt;/p&amp;gt;";
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTT68_dQSbbw24jRmdCEaq11017rHbhLLd033jWCbJ77zIhlDVXA-HIZFXTHgq-8IXw-BuZJkApcdhRAbub1hdV2u1zCz30BgRQcHpZ5yOHgxOoAIRfHuZfTq6nuL-FoG1BYfxAJHArQk/s1600/php7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTT68_dQSbbw24jRmdCEaq11017rHbhLLd033jWCbJ77zIhlDVXA-HIZFXTHgq-8IXw-BuZJkApcdhRAbub1hdV2u1zCz30BgRQcHpZ5yOHgxOoAIRfHuZfTq6nuL-FoG1BYfxAJHArQk/s320/php7.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/12/3-tutorial-de-php7-variables-constantes.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/wS8KXwgx6K8/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-4271084462761464611</guid><pubDate>Tue, 29 Dec 2015 12:43:00 +0000</pubDate><atom:updated>2015-12-29T20:13:30.795+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">php7</category><title>2 - Tutorial de PHP7 - Sintaxis básica y salida de datos</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/Skhpm-obxRI/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/Skhpm-obxRI?feature=player_embedded" width="320"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Bienvenid@s en este capítulo del &lt;i&gt;&lt;b&gt;Tutorial de PHP7&lt;/b&gt;&lt;/i&gt; empezamos a ver la Referencia del Lenguaje, concretamente, aspectos básicos como la salida de datos, PHP en Html, separación de bloques de instrucciones y los comentarios.&lt;/div&gt;
&lt;div id="content"&gt;
&lt;div id="c0"&gt;
&lt;h1&gt;
Referencia del Lenguaje - Sintaxis básica y salida de datos:&lt;/h1&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;Salida de datos con las funciones &lt;b&gt;print&lt;/b&gt;, &lt;b&gt;echo&lt;/b&gt; y la etiqueta especial de apertura &lt;b&gt;&amp;lt;?=&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;PHP en Html&lt;/li&gt;
&lt;li&gt;Separación de bloque de instrucciones&lt;/li&gt;
&lt;li&gt;Comentarios&lt;/li&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
Para la salida de datos podemos utilizar las funciones &lt;b&gt;print&lt;/b&gt; y &lt;b&gt;echo&lt;/b&gt; y la etiqueta especial de apertura &amp;lt;?= disponible desde la versión de PHP 5.4.0. En el siguiente ejemplo estamos realizando una salida de tres párrafos ...
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;?php
echo "&amp;lt;p&amp;gt;Hola mundo&amp;lt;/p&amp;gt;";
print '&amp;lt;p&amp;gt;Una nueva línea&amp;lt;/p&amp;gt;';
?&amp;gt;
&amp;lt;?= "&amp;lt;p&amp;gt;Etiqueta especial&amp;lt;/p&amp;gt;" ?&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Como puedes ver cada instrucción se cierra con el punto y coma ";", si se trata de la última instrucción o única instrucción del bloque no es necesario incluir el punto y coma de fin de la instrucción. En el caso anterior ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;?php
echo "&amp;lt;p&amp;gt;Hola mundo&amp;lt;/p&amp;gt;";
print '&amp;lt;p&amp;gt;Una nueva línea&amp;lt;/p&amp;gt;'
?&amp;gt;
&amp;lt;?= "&amp;lt;p&amp;gt;Etiqueta especial&amp;lt;/p&amp;gt;" ?&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;PHP en Html.&lt;/b&gt; Una de las características de PHP es que podemos escribir PHP en Html, por ejemplo, podemos encerrar los tres párrafos anteriores entre unas etiquetas html "div" ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;div&amp;gt;
&amp;lt;?php
echo "&amp;lt;p&amp;gt;Hola mundo&amp;lt;/p&amp;gt;";
print '&amp;lt;p&amp;gt;Una nueva línea&amp;lt;/p&amp;gt;'
?&amp;gt;
&amp;lt;?= "&amp;lt;p&amp;gt;Etiqueta especial&amp;lt;/p&amp;gt;" ?&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Otro aspecto importante es cuando se trata del último bloque de instrucciones y no le precede otro contenido, en este caso, podemos ignorar la inclusión de la etiqueta de cierre &lt;b&gt;?&amp;gt; &lt;/b&gt;de PHP, aunque por supuesto, la podemos incluir, de ambas formas sería correcto. Continuando con el código anterior, agregaremos un último bloque de instrucciones de PHP. Por ejemplo ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;div&amp;gt;
&amp;lt;?php
echo "&amp;lt;p&amp;gt;Hola mundo&amp;lt;/p&amp;gt;";
print '&amp;lt;p&amp;gt;Una nueva línea&amp;lt;/p&amp;gt;'
?&amp;gt;
&amp;lt;?= "&amp;lt;p&amp;gt;Etiqueta especial&amp;lt;/p&amp;gt;" ?&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;?php
echo "&amp;lt;p&amp;gt;Bloque final de php&amp;lt;/p&amp;gt;";
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Otro aspecto importante es la inclusión de comentarios en los scripts php, los comentarios no son interpretados como código y para el programador son muy útiles, para ir comentando las diferentes partes de la estructura de código.
&lt;/div&gt;
&lt;br /&gt;
Para una sóla línea de comentario utilizaremos:
&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;span style="color: green;"&gt;// comentario&lt;/span&gt;&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;
Para varias líneas de comentario utilizaremos: 
&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;
&lt;span style="color: green;"&gt;
/* una línea de comentario
&lt;br /&gt;
otra línea de comentario
&lt;br /&gt;
otra línea más de comentario
*/
&lt;/span&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;
El código completo del script de este capítulo &lt;i&gt;sintaxis-basica.php&lt;/i&gt; es el siguiente:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;div&amp;gt;
&amp;lt;?php
echo "&amp;lt;p&amp;gt;Hola mundo&amp;lt;/p&amp;gt;";
print '&amp;lt;p&amp;gt;Una nueva línea&amp;lt;/p&amp;gt;'
?&amp;gt;
&amp;lt;?= "&amp;lt;p&amp;gt;Etiqueta especial&amp;lt;/p&amp;gt;" ?&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;?php
//Comentarios en una sola línea
/* 
una línea
otra línea
*/
echo "&amp;lt;p&amp;gt;Bloque final de php&amp;lt;/p&amp;gt;";
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTT68_dQSbbw24jRmdCEaq11017rHbhLLd033jWCbJ77zIhlDVXA-HIZFXTHgq-8IXw-BuZJkApcdhRAbub1hdV2u1zCz30BgRQcHpZ5yOHgxOoAIRfHuZfTq6nuL-FoG1BYfxAJHArQk/s1600/php7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTT68_dQSbbw24jRmdCEaq11017rHbhLLd033jWCbJ77zIhlDVXA-HIZFXTHgq-8IXw-BuZJkApcdhRAbub1hdV2u1zCz30BgRQcHpZ5yOHgxOoAIRfHuZfTq6nuL-FoG1BYfxAJHArQk/s320/php7.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/12/2-tutorial-de-php7-referencia-del.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/Skhpm-obxRI/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-9077191917725318901</guid><pubDate>Mon, 28 Dec 2015 16:09:00 +0000</pubDate><atom:updated>2015-12-29T16:37:14.517+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PHP</category><category domain="http://www.blogger.com/atom/ns#">php7</category><title>1 - Tutorial de PHP7 - Introducción e instalación en Windows</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/ku6Ew890aMc/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/ku6Ew890aMc?feature=player_embedded" width="320"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Bienvenid@s a este primer capítulo del Tutorial de PHP7, a continuación podéis seguir la guía con una breve introducción de los temas que veremos en el tutorial, la instalación de PHP7, herramientas, la puesta en marcha de un servidor de desarrollo y la ejecución del primer script PHP.&lt;/div&gt;
&lt;div id="content"&gt;
&lt;div id="c0"&gt;
&lt;h1 style="text-align: justify;"&gt;
Introducción al Curso de PHP7&lt;/h1&gt;
&lt;h3 style="text-align: justify;"&gt;
- ¿Qué es y que podemos hacer con PHP?&lt;/h3&gt;
&lt;div style="text-align: justify;"&gt;
PHP es un lenguaje de programación interpretado de alto rendimiento que es de código abierto y muy popular especialmente adecuado para el desarrollo web y que tiene como especial característica que puede ser incrustado en HTML.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp; &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
En lugar de usar muchos comandos para mostrar HTML (como en C o en Perl), las páginas de PHP contienen HTML con código incrustado. El código de PHP está encerrado entre las etiquetas especiales de comienzo y final &amp;lt;?php y ?&amp;gt; que permiten entrar y salir del "modo PHP".&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp; &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
A diferencia del código Javascript que es ejecutado del lado del cliente, el código PHP es ejecutado en el servidor, aunque el código php esté incrustado en el HTML este código es innaccesible para el usuario, de lo contrario el código Javascript si.&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp; &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
PHP está enfocado principalmente a la programación de scripts del lado del servidor, por lo que se puede hacer cualquier cosa que pueda hacer otro programa CGI, como recopilar datos de formularios, generar páginas con contenidos dinámicos, o enviar y recibir cookies. Aunque PHP puede hacer mucho más. 
   &lt;/div&gt;
&lt;h3&gt;
- Objetivo del curso&lt;/h3&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;Referencia del Lenguaje: Sintaxis básica, Tipos, Variables, Constantes, Expresiones, Operadores, Estructuras de Control, Funciones, POO, ...&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Seguridad: Envío de formularios seguros, consultas a bases de datos, expresiones regulares, ...&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Referencia de funciones: uso de extensiones básicas para el manejo de ficheros, envío de correos electrónicos, manejo de bases de datos, ...&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Manejo de librerías populares desarrolladas con PHP&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div id="c1"&gt;
&lt;h1&gt;
Instalación en Windows de PHP7&lt;/h1&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li style="text-align: justify;"&gt;Ir a la sección de descargas de la página oficial de PHP: &lt;a href="http://php.net/downloads.php" target="_blank"&gt;http://php.net/downloads.php&lt;/a&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;O descargar directamente desde aquí:&lt;/li&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;&lt;a href="http://windows.php.net/downloads/releases/php-7.0.1-Win32-VC14-x86.zip" target="_blank"&gt;PHP Versión 7.0.1 32 bits&lt;/a&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;a href="http://windows.php.net/downloads/releases/php-7.0.1-Win32-VC14-x64.zip" target="_blank"&gt;PHP Versión 7.0.1 64 bits&lt;/a&gt;&amp;nbsp; &lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;div style="text-align: justify;"&gt;
Requisitos del sistema:
    &lt;/div&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;Windows Vista o superior&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Tener instalada la redistribución de Visual C++ para Visual Studio 2015 para x86 (32 bits) ó x64 (64 bits) en el siguiente enlace: &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=48145" target="_blank"&gt;http://www.microsoft.com/en-us/download/details.aspx?id=48145&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: justify;"&gt;
Una vez descargado crear una carpeta, por ejemplo, en el escritorio llamada "&lt;b&gt;php7&lt;/b&gt;" y extraer los ficheros descargados en esta carpeta. &lt;/div&gt;
&lt;h1&gt;
Herramientas para escribir código:&lt;/h1&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;div style="text-align: justify;"&gt;
Editores de código populares:
    &lt;/div&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;Notepad++ : &lt;a href="http://notepad-plus-plus.org/" target="_blank"&gt;http://notepad-plus-plus.org/&lt;/a&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Sublime Text : &lt;a href="http://www.sublimetext.com/" target="_blank"&gt;http://www.sublimetext.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div id="c2"&gt;
&lt;h1&gt;
Poniendo en marcha un servidor de desarrollo&lt;/h1&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li style="text-align: justify;"&gt;Crear el directorio que utilizaremos como "document root", normalmente lo llamaremos como "public", en este directorio incluiremos los scripts php, archivos html o cualquier otro que pueden ser accesibles (públicos). Para el Tutorial crearemos una carpeta, por ejemplo, en el escritorio llamada "&lt;i&gt;tutorial-php7&lt;/i&gt;" en el interior de esta carpeta crearemos la carpeta pública "&lt;i&gt;public&lt;/i&gt;"&lt;/li&gt;
&lt;li&gt;&lt;div style="text-align: justify;"&gt;
Poner en marcha el servidor:
     &lt;/div&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;      Abrir una consola, ir a la raiz de la carpeta dónde hemos alojado los archivos descargados de PHP, por ejemplo:&lt;/li&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;cd c:\Users\usuario\Desktop\php7&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;div style="text-align: justify;"&gt;
Ejecutar el siguiente comando:&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;php -S localhost:8080 -t c:\Users\usuario\Desktop\tutorial-php7\public&lt;/span&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
Mi primer script PHP&lt;/h1&gt;
Abrir el editor de código, crear un nuevo archivo y guardarlo como "&lt;i&gt;&lt;b&gt;index.php&lt;/b&gt;&lt;/i&gt;" en la carpeta "&lt;i&gt;&lt;b&gt;public&lt;/b&gt;&lt;/i&gt;" de la carpeta "&lt;i&gt;&lt;b&gt;tutorial-php7&lt;/b&gt;&lt;/i&gt;".&lt;br /&gt;
&lt;br /&gt;
Incluye el siguiente código en el archivo "&lt;i&gt;&lt;b&gt;index.php&lt;/b&gt;&lt;/i&gt;":&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;?php echo "Tutorial de PHP7"; ?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Ve al navegador, abre una nueva pestaña e incluye la dirección del servidor de desarrollo:&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;http://localhost:8080&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Verás el texto "Tutorial de PHP7", este código ha sido ejecutado en el servidor y ha regresado esta respuesta, si ves el código fuente de la página podrás comprobar como el código php no está disponible en el cliente (Navegador).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgALpyaHIRewoCw5AfG1xiwcvTF172VKuTrpbZhsjAF1BcEoWd7yj3cJII83m8djEQG8A9dosl8oWGyHIUcnL8oG-0AdNmYj5qHTgpnNXfdTSickT4fC5uBLaDld7Dlpc-43B5TFfNhYww/s1600/php7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgALpyaHIRewoCw5AfG1xiwcvTF172VKuTrpbZhsjAF1BcEoWd7yj3cJII83m8djEQG8A9dosl8oWGyHIUcnL8oG-0AdNmYj5qHTgpnNXfdTSickT4fC5uBLaDld7Dlpc-43B5TFfNhYww/s1600/php7.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/12/1-tutorial-de-php7-introduccion-e.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/ku6Ew890aMc/default.jpg" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-8847782109595809701</guid><pubDate>Tue, 15 Dec 2015 16:30:00 +0000</pubDate><atom:updated>2015-12-15T17:39:59.598+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laravel</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>25 - Tutorial de Laravel 5 - OAuth2 Socialite (Registrar y autenticar al usuario)</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/tvutHzkt1I8/0.jpg" src="https://www.youtube.com/embed/tvutHzkt1I8?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En este capítulo del &lt;i&gt;&lt;b&gt;Tutorial de Laravel 5&lt;/b&gt;&lt;/i&gt; continuamos dándole forma a la autenticación y registro de usuarios a través de proveedores como &lt;i&gt;&lt;b&gt;Facebook y Google&lt;/b&gt;&lt;/i&gt;, este capítulo es la &lt;a href="http://jquery-manual.blogspot.com/2015/12/24-tutorial-de-laravel-5-oauth2.html" target="_blank"&gt; continuación del anterior&lt;/a&gt;.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Para empezar realizamos una modificación en la tabla "&lt;b&gt;users&lt;/b&gt;" agregándole una nueva columna llamada "&lt;b&gt;social&lt;/b&gt;" del tipo &lt;i&gt;BOOLEAN&lt;/i&gt; y con valor por defecto &lt;i&gt;0&lt;/i&gt; (false). Esta columna nos permitirá determinar saber si el usuario autenticado es un usuario registrado de forma normal o a través de un proveedor de servicios. También editaremos la columna "&lt;b&gt;password&lt;/b&gt;" de la tabla "&lt;b&gt;users&lt;/b&gt;" permitiendo &lt;i&gt;valores nulos&lt;/i&gt;.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Crearemos una nueva tabla con artisan llamada "&lt;i&gt;&lt;b&gt;user_social_accounts&lt;/b&gt;&lt;/i&gt;" en la cual guardaremos información extra de los usuarios, tales como el id de registro del usuario de la tabla "users", el proveedor y el id del proveedor.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Abrir una consola, ir a la raiz del proyecto Laravel y ejecutar el siguiente comando para crear la clase ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;php artisan make:migration user_social_accounts --create=user_social_accounts
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En la carpeta "&lt;i&gt;database\migrations&lt;/i&gt;" se ha generado un nuevo archivo "&lt;b&gt;xxx_user_social_accounts.php&lt;/b&gt;", abrirlo y agregar el método &lt;b&gt;up()&lt;/b&gt; el siguiente código ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;        Schema::create('user_social_accounts', function (Blueprint $table) {
            $table-&amp;gt;increments('id');
	    $table-&amp;gt;integer('user_id');
	    $table-&amp;gt;string('provider');
	    $table-&amp;gt;string('uid_provider');
        });
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Guardar el archivo, regresar a la consola y realizar la migración con el siguiente comando ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;php artisan migrate
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
A continuación crearemos un modelo que nos permita utilizar &lt;i&gt;&lt;b&gt;eloquent&lt;/b&gt;&lt;/i&gt; para esta nueva tabla, en la carpeta "&lt;i&gt;&lt;b&gt;app&lt;/b&gt;&lt;/i&gt;" crearemos un nuevo archivo llamado "&lt;i&gt;&lt;b&gt;Social.php&lt;/b&gt;&lt;/i&gt;" y le agregaremos el siguiente código ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Social extends Model
{
    protected $table = 'user_social_accounts';
    public $timestamps = false;
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
A continuación nos dirigimos al controlador que creamos en el capítulo anterior &lt;i&gt;&lt;b&gt;SocialController&lt;/b&gt;&lt;/i&gt; para realizar las modificaciones necesarias para la acción que recibe la respuesta del proveedor con la información del usuario, primero agregamos el nuevo modelo:&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;use App\Social;&lt;/pre&gt;
&lt;br /&gt;
Y luego modificamos la acción &lt;i&gt;&lt;b&gt;getSocialAuthCallback&lt;/b&gt;&lt;/i&gt;  ...
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;  public function getSocialAuthCallback($provider=null)
       {
          if($user = Socialite::driver($provider)-&amp;gt;user()){
			  
             if ($the_user = User::select()-&amp;gt;where('email', '=', $user-&amp;gt;email)-&amp;gt;first())
			 {
				 Auth::login($the_user);
			 }	else{
				 $new_user = new User;
				 $new_user-&amp;gt;name = $user-&amp;gt;name;
				 $new_user-&amp;gt;email = $user-&amp;gt;email;
				 $new_user-&amp;gt;perfiles = $user-&amp;gt;avatar;
				 $new_user-&amp;gt;active = 1;
				 $new_user-&amp;gt;social = 1;
				 $new_user-&amp;gt;save();
				 Auth::login($new_user);
				 
				 //Registrar Información extra
				 $social = new Social;
				 $social-&amp;gt;user_id = $new_user-&amp;gt;id;
				 $social-&amp;gt;provider = $provider;
				 $social-&amp;gt;uid_provider = $user-&amp;gt;id;
				 $social-&amp;gt;save();
			 }
			 return redirect('home');
          }else{
             return '¡¡¡Algo fue mal!!!';
          }
       }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En esta acción comprobamos primeramente si hemos podido obtener información del usuario, si es así, comprobamos si se encuentra registrado en la tabla "users" a través de su email, de ser así, autenticamos el usuario, de lo contrario, si el usuario no se encuentra registrado, lo registramos y lo autenticamos y guardamos la información extra del usuario en la nueva tabla "user_social_accounts".
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Ahora realicen la prueba de registrarse en la aplicación a través de Facebook y Google. Otra cosa que se muestra en el vídeo es como establecer a través de una condición si el usuario es registrado normal o a través de un proveedor, el ejemplo se muestra en la vista &lt;i&gt;&lt;b&gt;user.blade.php&lt;/b&gt;&lt;/i&gt; que muestra el panel de usuario, donde se muestran distintas opciones, entre ellas la posibilidad de cambiar el password, para el caso de los usuarios autenticados a través de un proveedor, esta opción no debe estar disponible, de modo que con una simple condición podemos mostrar o no la opción de cambiar el password ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;	@if(Auth::user()-&amp;gt;social == 0)
    &amp;lt;li&amp;gt;&amp;lt;a href="{{url('user/password')}}"&amp;gt;Cambiar mi password&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
	@endif
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Como pueden ver en esta condición entra en juego la columna "social", 0 es para usuarios registrados de forma normal y 1 para usuarios registrados a través de un proveedor.
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s1600/Laravel-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s1600/Laravel-5.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/12/25-tutorial-de-laravel-5-oauth2.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/tvutHzkt1I8/default.jpg" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-2419512719261971196</guid><pubDate>Mon, 14 Dec 2015 22:05:00 +0000</pubDate><atom:updated>2015-12-15T15:14:52.359+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laravel</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>24 - Tutorial de Laravel 5 - OAuth2 Socialite (Facebook &amp; Google)</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/9Z-PbD125Wk/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/9Z-PbD125Wk?feature=player_embedded" width="320"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En este capítulo del &lt;i&gt;&lt;b&gt;Tutorial de Laravel 5&lt;/b&gt;&lt;/i&gt; veremos como podemos integrar servicios como Google y Facebook para autenticar usuarios 
en nuestra aplicación.
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Lo primero es crear ambas aplicaciones para obtener las claves de acceso a las apis de Facebook y Google, el proceso de creación de 
las aplicaciones se muestran al inicio del vídeo.
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Seguiremos las instrucciones de la &lt;b&gt;&lt;a href="http://laravel.com/docs/5.1/authentication#social-authentication" target="_blank"&gt;documentación de Laravel&lt;/a&gt;&lt;/b&gt; para instalar &lt;i&gt;&lt;b&gt;Socialite&lt;/b&gt;&lt;/i&gt; a través de composer, Socialite nos ofrece soporte para los siguientes proveedores: Facebook, Twitter, LinkedIn, Google, GitHub y Bitbucket.
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Abrir una consola, ir a la raíz del proyecto laravel, en el vídeo se utiliza &lt;i&gt;&lt;b&gt;&lt;a href="https://getcomposer.org/composer.phar"&gt;composer.phar&lt;/a&gt;&lt;/b&gt;&lt;/i&gt; para su instalación y ejecutar el siguiente comando ...
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;php composer.phar require laravel/socialite
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Agregar el nuevo proveedor y el alias en el archivo "&lt;i&gt;&lt;b&gt;config\app.php&lt;/b&gt;&lt;/i&gt;" ...
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;//Providers
Laravel\Socialite\SocialiteServiceProvider::class,

//Aliases
'Socialite' =&amp;gt; Laravel\Socialite\Facades\Socialite::class,
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Agregar las credenciales de acceso a los servicios de google y facebook en el archivo "&lt;i&gt;&lt;b&gt;config\service.php&lt;/b&gt;&lt;/i&gt;" ...
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt; 'facebook' =&amp;gt; [
  'client_id' =&amp;gt; '',
  'client_secret' =&amp;gt; '',
  'redirect' =&amp;gt; 'http://localhost/tutorial-laravel/public/social/callback/facebook',
 ],
 
 'google' =&amp;gt; [
  'client_id' =&amp;gt; '',
  'client_secret' =&amp;gt; '',
  'redirect' =&amp;gt; 'http://localhost/tutorial-laravel/public/social/callback/google',
 ],
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Crear un nuevo controlador llamado "&lt;i&gt;&lt;b&gt;SocialController.php&lt;/b&gt;&lt;/i&gt;" con el siguiente código ...
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;?php 

namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\User;
use Auth;
use Socialite;

class SocialController extends Controller {

    public function __construct(){
     $this-&amp;gt;middleware('guest');
    }

       public function getSocialAuth($provider=null)
       {
           if(!config("services.$provider")) abort('404');

           return Socialite::driver($provider)-&amp;gt;redirect();
       }


       public function getSocialAuthCallback($provider=null)
       {
          if($user = Socialite::driver($provider)-&amp;gt;user()){
             dd($user);  
          }else{
             return '¡¡¡Algo fue mal!!!';
          }
       }
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
A este controlador sólo tendrán acceso los usuarios invitados, la acción getSocialAuth es la encargada de realizar la petición al proveedor y la acción getSocialAuthCallback es la encargada de obtener la respuesta con los datos del usuario.
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Agregaremos las nuevas rutas en&lt;i&gt;&lt;b&gt; routes.php&lt;/b&gt;&lt;/i&gt; ...
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;//Social Login
Route::get('social/{provider?}', 'SocialController@getSocialAuth');
Route::get('social/callback/{provider?}', 'SocialController@getSocialAuthCallback');
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
El argumento provider es opcional y tendrá como valor el nombre del proveedor a acceder, en nuestro caso, Google ó Facebook.
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En el vídeo se comenta la posibilidad de obtener un error en Windows al obtener la respuesta de los proveedores &lt;i&gt;"cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html ..."&lt;/i&gt;, para solventar este error descargaremos el siguiente certificado ... &lt;i&gt;&lt;b&gt;&lt;a href="https://sites.google.com/site/bibliotecaestudiosphp/archivos/cacert.pem?attredirects=0&amp;amp;d=1"&gt;cacert.pem&lt;/a&gt;&lt;/b&gt;&lt;/i&gt;, lo guardaremos en la carpeta "xampp", abriremos la carpeta php y abriremos el archivo "&lt;i&gt;&lt;b&gt;php.ini&lt;/b&gt;&lt;/i&gt;" para agregar la siguiente línea al final ...&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;curl.cainfo = "C:\xampp\cacert.pem"&lt;/i&gt;
&lt;br /&gt;
&lt;br /&gt;
Guardar el archivo y reiniciar nuevamente apache. 
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Para ver la prueba agregaremos dos links a la vista "&lt;i&gt;&lt;b&gt;auth\login.blade.php&lt;/b&gt;&lt;/i&gt;" para acceder a los proveedores ...
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt; ...
 &amp;lt;br /&amp;gt;
 &amp;lt;a href='{{url("social/facebook")}}'&amp;gt;Iniciar sesión con Facebook&amp;lt;/a&amp;gt;
 &amp;lt;br /&amp;gt;
 &amp;lt;a href='{{url("social/google")}}'&amp;gt;Iniciar sesión con Google&amp;lt;/a&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Ahora prueben a iniciar sesión con Facebook ó Google para ver como los proveedores te solitican la primera vez que permitas a la aplicación tener información tuya y como posteriormente te redirecciona mostrando la información de usuario.
&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s1600/Laravel-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s320/Laravel-5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/12/24-tutorial-de-laravel-5-oauth2.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/9Z-PbD125Wk/default.jpg" width="72"/><thr:total>0</thr:total><enclosure length="-1" type="application/octet-stream" url="https://getcomposer.org/composer.phar"/><itunes:explicit>no</itunes:explicit><itunes:subtitle>En este capítulo del Tutorial de Laravel 5 veremos como podemos integrar servicios como Google y Facebook para autenticar usuarios en nuestra aplicación. Lo primero es crear ambas aplicaciones para obtener las claves de acceso a las apis de Facebook y Google, el proceso de creación de las aplicaciones se muestran al inicio del vídeo. Seguiremos las instrucciones de la documentación de Laravel para instalar Socialite a través de composer, Socialite nos ofrece soporte para los siguientes proveedores: Facebook, Twitter, LinkedIn, Google, GitHub y Bitbucket. Abrir una consola, ir a la raíz del proyecto laravel, en el vídeo se utiliza composer.phar para su instalación y ejecutar el siguiente comando ... php composer.phar require laravel/socialite Agregar el nuevo proveedor y el alias en el archivo "config\app.php" ... //Providers Laravel\Socialite\SocialiteServiceProvider::class, //Aliases 'Socialite' =&amp;gt; Laravel\Socialite\Facades\Socialite::class, Agregar las credenciales de acceso a los servicios de google y facebook en el archivo "config\service.php" ... 'facebook' =&amp;gt; [ 'client_id' =&amp;gt; '', 'client_secret' =&amp;gt; '', 'redirect' =&amp;gt; 'http://localhost/tutorial-laravel/public/social/callback/facebook', ], 'google' =&amp;gt; [ 'client_id' =&amp;gt; '', 'client_secret' =&amp;gt; '', 'redirect' =&amp;gt; 'http://localhost/tutorial-laravel/public/social/callback/google', ], Crear un nuevo controlador llamado "SocialController.php" con el siguiente código ... &amp;lt;?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\User; use Auth; use Socialite; class SocialController extends Controller { public function __construct(){ $this-&amp;gt;middleware('guest'); } public function getSocialAuth($provider=null) { if(!config("services.$provider")) abort('404'); return Socialite::driver($provider)-&amp;gt;redirect(); } public function getSocialAuthCallback($provider=null) { if($user = Socialite::driver($provider)-&amp;gt;user()){ dd($user); }else{ return '¡¡¡Algo fue mal!!!'; } } } A este controlador sólo tendrán acceso los usuarios invitados, la acción getSocialAuth es la encargada de realizar la petición al proveedor y la acción getSocialAuthCallback es la encargada de obtener la respuesta con los datos del usuario. Agregaremos las nuevas rutas en routes.php ... //Social Login Route::get('social/{provider?}', 'SocialController@getSocialAuth'); Route::get('social/callback/{provider?}', 'SocialController@getSocialAuthCallback'); El argumento provider es opcional y tendrá como valor el nombre del proveedor a acceder, en nuestro caso, Google ó Facebook. En el vídeo se comenta la posibilidad de obtener un error en Windows al obtener la respuesta de los proveedores "cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html ...", para solventar este error descargaremos el siguiente certificado ... cacert.pem, lo guardaremos en la carpeta "xampp", abriremos la carpeta php y abriremos el archivo "php.ini" para agregar la siguiente línea al final ... curl.cainfo = "C:\xampp\cacert.pem" Guardar el archivo y reiniciar nuevamente apache. Para ver la prueba agregaremos dos links a la vista "auth\login.blade.php" para acceder a los proveedores ... ... &amp;lt;br /&amp;gt; &amp;lt;a href='{{url("social/facebook")}}'&amp;gt;Iniciar sesión con Facebook&amp;lt;/a&amp;gt; &amp;lt;br /&amp;gt; &amp;lt;a href='{{url("social/google")}}'&amp;gt;Iniciar sesión con Google&amp;lt;/a&amp;gt; Ahora prueben a iniciar sesión con Facebook ó Google para ver como los proveedores te solitican la primera vez que permitas a la aplicación tener información tuya y como posteriormente te redirecciona mostrando la información de usuario.</itunes:subtitle><itunes:author>noreply@blogger.com (Unknown)</itunes:author><itunes:summary>En este capítulo del Tutorial de Laravel 5 veremos como podemos integrar servicios como Google y Facebook para autenticar usuarios en nuestra aplicación. Lo primero es crear ambas aplicaciones para obtener las claves de acceso a las apis de Facebook y Google, el proceso de creación de las aplicaciones se muestran al inicio del vídeo. Seguiremos las instrucciones de la documentación de Laravel para instalar Socialite a través de composer, Socialite nos ofrece soporte para los siguientes proveedores: Facebook, Twitter, LinkedIn, Google, GitHub y Bitbucket. Abrir una consola, ir a la raíz del proyecto laravel, en el vídeo se utiliza composer.phar para su instalación y ejecutar el siguiente comando ... php composer.phar require laravel/socialite Agregar el nuevo proveedor y el alias en el archivo "config\app.php" ... //Providers Laravel\Socialite\SocialiteServiceProvider::class, //Aliases 'Socialite' =&amp;gt; Laravel\Socialite\Facades\Socialite::class, Agregar las credenciales de acceso a los servicios de google y facebook en el archivo "config\service.php" ... 'facebook' =&amp;gt; [ 'client_id' =&amp;gt; '', 'client_secret' =&amp;gt; '', 'redirect' =&amp;gt; 'http://localhost/tutorial-laravel/public/social/callback/facebook', ], 'google' =&amp;gt; [ 'client_id' =&amp;gt; '', 'client_secret' =&amp;gt; '', 'redirect' =&amp;gt; 'http://localhost/tutorial-laravel/public/social/callback/google', ], Crear un nuevo controlador llamado "SocialController.php" con el siguiente código ... &amp;lt;?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\User; use Auth; use Socialite; class SocialController extends Controller { public function __construct(){ $this-&amp;gt;middleware('guest'); } public function getSocialAuth($provider=null) { if(!config("services.$provider")) abort('404'); return Socialite::driver($provider)-&amp;gt;redirect(); } public function getSocialAuthCallback($provider=null) { if($user = Socialite::driver($provider)-&amp;gt;user()){ dd($user); }else{ return '¡¡¡Algo fue mal!!!'; } } } A este controlador sólo tendrán acceso los usuarios invitados, la acción getSocialAuth es la encargada de realizar la petición al proveedor y la acción getSocialAuthCallback es la encargada de obtener la respuesta con los datos del usuario. Agregaremos las nuevas rutas en routes.php ... //Social Login Route::get('social/{provider?}', 'SocialController@getSocialAuth'); Route::get('social/callback/{provider?}', 'SocialController@getSocialAuthCallback'); El argumento provider es opcional y tendrá como valor el nombre del proveedor a acceder, en nuestro caso, Google ó Facebook. En el vídeo se comenta la posibilidad de obtener un error en Windows al obtener la respuesta de los proveedores "cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html ...", para solventar este error descargaremos el siguiente certificado ... cacert.pem, lo guardaremos en la carpeta "xampp", abriremos la carpeta php y abriremos el archivo "php.ini" para agregar la siguiente línea al final ... curl.cainfo = "C:\xampp\cacert.pem" Guardar el archivo y reiniciar nuevamente apache. Para ver la prueba agregaremos dos links a la vista "auth\login.blade.php" para acceder a los proveedores ... ... &amp;lt;br /&amp;gt; &amp;lt;a href='{{url("social/facebook")}}'&amp;gt;Iniciar sesión con Facebook&amp;lt;/a&amp;gt; &amp;lt;br /&amp;gt; &amp;lt;a href='{{url("social/google")}}'&amp;gt;Iniciar sesión con Google&amp;lt;/a&amp;gt; Ahora prueben a iniciar sesión con Facebook ó Google para ver como los proveedores te solitican la primera vez que permitas a la aplicación tener información tuya y como posteriormente te redirecciona mostrando la información de usuario.</itunes:summary><itunes:keywords>jquery,php,css,html,html5,css3,javascript,python,perl</itunes:keywords></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-3869514607115137409</guid><pubDate>Mon, 07 Dec 2015 20:40:00 +0000</pubDate><atom:updated>2015-12-08T00:34:00.443+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laravel</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>23 - Tutorial de Laravel 5 - Admin Panel (Panel de Administrador)</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/wlVArbYDl7Y/0.jpg" src="https://www.youtube.com/embed/wlVArbYDl7Y?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En este capítulo del &lt;i&gt;&lt;b&gt;Tutorial de Laravel 5 &lt;/b&gt;&lt;/i&gt;veremos un supuesto en el cual tenemos que crear un &lt;i&gt;&lt;b&gt;Panel de Administrador&lt;/b&gt;&lt;/i&gt;. La condición de administrador o no, la realizaremos desde la tabla &lt;i&gt;&lt;b&gt;users&lt;/b&gt;&lt;/i&gt;, para esta tarea crearemos una nueva columna llamada "&lt;i&gt;&lt;b&gt;user&lt;/b&gt;&lt;/i&gt;" del tipo integer y con un valor por defecto 0, el valor de esta columna nos determinará el tipo de usuario del que se trata, 0 para usuario normal y 1 para usuario administrador.
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Empezaremos con el uso de &lt;i&gt;&lt;b&gt;artisan&lt;/b&gt;&lt;/i&gt; para realizar la migración, primero generaremos la clase, abrir una consola, dirigirnos a la raiz de nuestro proyecto e introducir el siguiente comando ...
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;php artisan make:migration add_user_to_users
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Una vez se ha generado el archivo, nos dirigimos a "&lt;i&gt;database\migrations&lt;/i&gt;" y abrimos el archivo &lt;i&gt;&lt;b&gt;xxx_add_user_to_users.php&lt;/b&gt;&lt;/i&gt; e incluimos el siguiente código dentro del método &lt;i&gt;&lt;b&gt;up()&lt;/b&gt;&lt;/i&gt; para crear la nueva columna ...
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;        Schema::table('users', function($table){
            $table-&amp;gt;integer('user')-&amp;gt;default(0);
        });
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
A continuación regresamos a la consola y realizamos la migración ...&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;php artisan migrate
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Ok, ya tenemos la nueva columna "&lt;i&gt;&lt;b&gt;user&lt;/b&gt;&lt;/i&gt;" en la tabla "&lt;i&gt;&lt;b&gt;users&lt;/b&gt;&lt;/i&gt;".&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Para el acceso al panel de administrador crearemos un nuevo controlador "&lt;i&gt;&lt;b&gt;AdminController&lt;/b&gt;&lt;/i&gt;", el controlador lo crearemos con artisan, desde la consola ...&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;php artisan make:controller AdminController
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Nos dirigimos al nuevo controlador que se encuentra en "app\Http\Controllers" y dejamos la clase vacía, es decir, quitamos todos los métodos que se incluyen por defecto e importamos las siguientes clases ...
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;use App\User;
use Validator;
use Auth;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
A continuación crearemos una acción-ruta "&lt;i&gt;&lt;b&gt;createAdmin&lt;/b&gt;&lt;/i&gt;" que permitirá al propietario de la aplicación crear un administrador o administradores, esta acción-ruta ha de ser usada y posteriormente comentada para evitar el acceso a cualquier usuario ...
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Agregar el código de la acción "&lt;i&gt;&lt;b&gt;createAdmin&lt;/b&gt;&lt;/i&gt;" al controlador AdminController ...&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;public function createAdmin(Request $request){
  
  if ($request-&amp;gt;isMethod('post'))
  {
   //Roles de validación
   $rules = [
    'name' =&amp;gt; 'required|min:3|max:16|regex:/^[a-záéíóúàèìòùäëïöüñ\s]+$/i',
    'email' =&amp;gt; 'required|email|max:255|unique:users,email',
    'password' =&amp;gt; 'required|min:6|max:18|confirmed',
   ];
   
   //Posibles mensajes de error de validación
   $messages = [
    'name.required' =&amp;gt; 'El campo es requerido',
    'name.min' =&amp;gt; 'El mínimo de caracteres permitidos son 3',
    'name.max' =&amp;gt; 'El máximo de caracteres permitidos son 16',
    'name.regex' =&amp;gt; 'Sólo se aceptan letras',
    'email.required' =&amp;gt; 'El campo es requerido',
    'email.email' =&amp;gt; 'El formato de email es incorrecto',
    'email.max' =&amp;gt; 'El máximo de caracteres permitidos son 255',
    'email.unique' =&amp;gt; 'El email ya existe',
    'password.required' =&amp;gt; 'El campo es requerido',
    'password.min' =&amp;gt; 'El mínimo de caracteres permitidos son 6',
    'password.max' =&amp;gt; 'El máximo de caracteres permitidos son 18',
    'password.confirmed' =&amp;gt; 'Los passwords no coinciden',
   ];
   
   $validator = Validator::make($request-&amp;gt;all(), $rules, $messages);
   
   //Si la validación no es correcta redireccionar al formulario con los errores
   if ($validator-&amp;gt;fails()){
    return redirect()-&amp;gt;back()-&amp;gt;withErrors($validator);
   }
   else{ // De los contrario guardar al usuario
    $user = new User;
    $user-&amp;gt;name = $request-&amp;gt;name;
    $user-&amp;gt;email = $request-&amp;gt;email;
    $user-&amp;gt;password = bcrypt($request-&amp;gt;password);
    $user-&amp;gt;remember_token = str_random(100);
    $user-&amp;gt;confirm_token = str_random(100);
    //Activar al administrador sin necesidad de enviar correo electrónico
    $user-&amp;gt;active = 1;
    //El valor 1 en la columna determina si el usuario es administrador o no
    $user-&amp;gt;user = 1;
    
    if ($user-&amp;gt;save()){
     return redirect()-&amp;gt;back()-&amp;gt;with('message', 'Enhorabuena nuevo administrador creado correctamente');
    } else{
     return redirect()-&amp;gt;back()-&amp;gt;with('error', 'Ha ocurrido un error al guardar los datos');
    }
   }
  }
  
  return View('admin.createadmin');
 }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Esta acción estará disponible tanto para los métodos get y post, get para mostrar la vista "&lt;i&gt;&lt;b&gt;createadmin&lt;/b&gt;&lt;/i&gt;" que contiene el formulario de registro de administradores y post para recibir los argumentos del formulario. Si el formulario es enviado se valida, si pasa la validación se registra el nuevo usuario activándolo y con permisos de administrador.&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación creamos una nueva ruta para asociarla a esta acción en &lt;i&gt;&lt;b&gt;routes.php&lt;/b&gt;&lt;/i&gt; ...
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;Route::match(['get', 'post'], 'admin/createadmin', 'AdminController@createAdmin');
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Y creamos una nueva carpeta para las vistas del controlador "AdminController", en "resources\views", creamos una carpeta con nombre "&lt;i&gt;&lt;b&gt;admin&lt;/b&gt;&lt;/i&gt;" y agregamos la vista "&lt;i&gt;&lt;b&gt;createadmin.blade.php&lt;/b&gt;&lt;/i&gt;" que contiene el formulario de registro de administradores, el código es el siguiente ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;@extends('layouts.home')
@section('content')
&amp;lt;h1&amp;gt;Crear un nuevo administrador&amp;lt;/h1&amp;gt;
&amp;lt;div class='bg-danger' style='padding: 20px'&amp;gt;¡¡¡Una vez termines de crear el administrador desactiva esta acción-ruta!!!&amp;lt;/div&amp;gt;
&amp;lt;hr /&amp;gt;
@if (Session::has('message'))
 &amp;lt;div class='bg-info' style='padding: 20px'&amp;gt;
  {{Session::get('message')}}
 &amp;lt;/div&amp;gt;
 &amp;lt;hr /&amp;gt;
@endif
@if (Session::has('error'))
 &amp;lt;div class='bg-danger' style='padding: 20px'&amp;gt;
  {{Session::get('error')}}
 &amp;lt;/div&amp;gt;
 &amp;lt;hr /&amp;gt;
@endif
&amp;lt;form method="POST" action="{{url('admin/createadmin')}}"&amp;gt;
    {!! csrf_field() !!}

    &amp;lt;div class='form-group'&amp;gt;
        &amp;lt;label for="name"&amp;gt;Nombre:&amp;lt;/label&amp;gt;
        &amp;lt;input type="text" name="name" class="form-control" value="{{ old('name') }}" /&amp;gt;
        &amp;lt;div class="text-danger"&amp;gt;{{$errors-&amp;gt;first('name')}}&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;div class="form-group"&amp;gt;
        &amp;lt;label for="email"&amp;gt;Email:&amp;lt;/label&amp;gt;
        &amp;lt;input type="email" name="email" class="form-control" value="{{ old('email') }}" /&amp;gt;
        &amp;lt;div class="text-danger"&amp;gt;{{$errors-&amp;gt;first('email')}}&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;div class="form-group"&amp;gt;
        &amp;lt;label for="password"&amp;gt;Password:&amp;lt;/label&amp;gt;
        &amp;lt;input type="password" class="form-control" name="password"&amp;gt;
        &amp;lt;div class="text-danger"&amp;gt;{{$errors-&amp;gt;first('password')}}&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;div class="form-group"&amp;gt;
        &amp;lt;label for="password_confirmation"&amp;gt;Confirmar Password:&amp;lt;/label&amp;gt;
        &amp;lt;input type="password" class="form-control" name="password_confirmation"&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;div&amp;gt;
        &amp;lt;button type="submit" class="btn btn-primary"&amp;gt;Crear administrador&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
@stop
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Como podéis ver el formulario es prácticamente igual al formulario de registro que ya creamos en un &lt;a href="http://jquery-manual.blogspot.com/2015/11/8-tutorial-de-laravel-5-artisan-user.html" target="_blank"&gt;capítulo anterior&lt;/a&gt;.
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Ahora en el navegador, vamos a la nueva ruta "admin/createadmin" para registrar un administrador. Una vez que hemos creado el/los administrador/es es muy importante que comentemos la acción "createAdmin" y la ruta que la conecta.
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Ahora incluiremos la lógica al controlador "&lt;i&gt;&lt;b&gt;AdminController&lt;/b&gt;&lt;/i&gt;", para ello incluiremos el método constructor y haremos uso de &lt;i&gt;&lt;b&gt;middleware&lt;/b&gt;&lt;/i&gt; para permitir el acceso al mismo sólo a los usuarios autenticados, excepto a la acción createAdmin.
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;    public function __construct(){
        $this-&amp;gt;middleware('auth', ['except' =&amp;gt; 'createAdmin']);
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
A continuación crearemos un método privado que será el encargado de comprobar si el usuario autenticado es administrador o no. Este método luego será utilizado en cada una de las acciones del controlador. Código del método privado isAdmin() ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;    private function isAdmin(){
        if (Auth::user()-&amp;gt;user == 1) return true;
        else return false;
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
El método anterior regresa un valor boolean. Si la columna "user" del usuario autenticado es igual 1 es que es administrador. Para ver la prueba crearemos una nueva acción-ruta llamada "&lt;i&gt;&lt;b&gt;admin&lt;/b&gt;&lt;/i&gt;" con el siguiente código ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;    public function admin(){
        if ($this-&amp;gt;isAdmin()){
            return View('admin.admin');
        } else{
            return redirect()-&amp;gt;back();
        }
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Si el usuario es administrador mostramos una vista de lo contrario lo expulsamos redireccionándolo de dónde vino.
&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Esta acción "admin" la conectaremos a una nueva ruta en &lt;i&gt;&lt;b&gt;routes.php&lt;/b&gt;&lt;/i&gt; ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;Route::get('admin', 'AdminController@admin');
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Y crearemos la nueva vista "&lt;i&gt;&lt;b&gt;admin.blade.php&lt;/b&gt;&lt;/i&gt;" en la carpeta "&lt;i&gt;&lt;b&gt;admin&lt;/b&gt;&lt;/i&gt;" con el siguiente código ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;@extends('layouts.home')
@section('content')
&amp;lt;h1&amp;gt;Bienvenid@ {{Auth::user()-&amp;gt;name}} a su Panel de Administrador&amp;lt;/h1&amp;gt;
@stop
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Otra cosa que podemos hacer para finalizar es agregar un link al ménu del layout "&lt;i&gt;&lt;b&gt;home.blade.php&lt;/b&gt;&lt;/i&gt;" que permita al usuario administrador, ir al panel de administrador ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;          &amp;lt;ul class="nav navbar-nav navbar-right"&amp;gt;
   @if (Auth::check())
                        @if (Auth::user()-&amp;gt;user == 1)
   &amp;lt;li&amp;gt;&amp;lt;a href="{{url('admin')}}"&amp;gt;Panel de Administrador&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
                        @endif
   &amp;lt;li&amp;gt;&amp;lt;a href="{{url('user')}}"&amp;gt;{{Auth::user()-&amp;gt;name}}&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
   &amp;lt;li&amp;gt;&amp;lt;a href="{{url('auth/logout')}}"&amp;gt;Salir&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
   @else
            &amp;lt;li&amp;gt;&amp;lt;a href="{{url('auth/login')}}"&amp;gt;Iniciar sesión&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
   @endif
          &amp;lt;/ul&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Ahora prueben a iniciar sesión como usuarios normales y como administradores.&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s1600/Laravel-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s320/Laravel-5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/12/23-tutorial-de-laravel-5-admin-panel.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/wlVArbYDl7Y/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-7725314523326186066</guid><pubDate>Fri, 04 Dec 2015 19:13:00 +0000</pubDate><atom:updated>2015-12-04T20:49:40.960+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laravel</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>22 - Tutorial de Laravel 5 - Download Files (Descargar archivos del servidor)</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/gG1mBt9LnDI/0.jpg" src="https://www.youtube.com/embed/gG1mBt9LnDI?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
En este capítulo del &lt;b&gt;Tutorial de Laravel 5&lt;/b&gt; veremos un nuevo supuesto, en el cual nos solicitan incluir una opción en el Panel de Usuario para descargar un archivo pdf con los "términos y condiciones de uso del portal". La descarga de archivos sólo estará permitida a los usuarios autenticados.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Lo primero que haremos es agregar esta nueva opción a la vista "&lt;i&gt;&lt;b&gt;user.blade.php&lt;/b&gt;&lt;/i&gt;" ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;li&amp;gt;&amp;lt;a href="{{url('user/download')}}"&amp;gt;Descargar términos y condiciones de uso&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
A continuación crearemos la carpeta donde se incluirán los archivos descargables, si creamos esta carpeta en la carpeta "&lt;i&gt;&lt;b&gt;public&lt;/b&gt;&lt;/i&gt;" cometemos el error de que estará disponible a cualquier usuario, así que la crearemos en la carpeta "&lt;i&gt;&lt;b&gt;app&lt;/b&gt;&lt;/i&gt;" con el nombre "&lt;i&gt;&lt;b&gt;files&lt;/b&gt;&lt;/i&gt;" y le agregaremos un archivo pdf con el nombre "&lt;i&gt;&lt;b&gt;terminos.pdf&lt;/b&gt;&lt;/i&gt;".
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
A continuación agregaremos la ruta de descarga en &lt;i&gt;&lt;b&gt;routes.php&lt;/b&gt;&lt;/i&gt;, lógicamente es la misma que estamos indicando en el link de la opción ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;Route::get('user/download', 'UserController@download');
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Esta ruta está conectada al controlador "UserController" y a una acción llamada "download", recuerden que sólo los usuarios autenticados pueden tener acceso a las acciones de este controlador.
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Para la reutilización de código crearemos un nuevo método protegido llamado &lt;i&gt;&lt;b&gt;downloadFile&lt;/b&gt;&lt;/i&gt;, sólo accesible desde la clase y clases heredadas, este método lo podremos migrar a otra clase en caso de ser necesario. A este método tenemos que pasar un argumento, el cual es la ruta del archivo, este método regresa un valor boolean, si el archivo existe se procede a su descarga y retorna true, de lo contrario false. En el controlador &lt;i&gt;&lt;b&gt;UserController&lt;/b&gt;&lt;/i&gt; agregaremos el método ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;    protected function downloadFile($src){
        if(is_file($src)){
            $finfo = finfo_open(FILEINFO_MIME_TYPE);
            $content_type = finfo_file($finfo, $src);
            finfo_close($finfo);
            $file_name = basename($src).PHP_EOL;
            $size = filesize($src);
            header("Content-Type: $content_type");
            header("Content-Disposition: attachment; filename=$file_name");
            header("Content-Transfer-Encoding: binary");
            header("Content-Length: $size");
            readfile($src);
            return true;
        } else{
            return false;
        }
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
También en el controlador &lt;i&gt;&lt;b&gt;UserController&lt;/b&gt;&lt;/i&gt; agregaremos la acción "&lt;i&gt;&lt;b&gt;download&lt;/b&gt;&lt;/i&gt;", en esta acción haremos uso del método &lt;i&gt;&lt;b&gt;downloadFile&lt;/b&gt;&lt;/i&gt; comprobando si la descarga se ha realizado con éxito o no, si no es así, redireccionamos atrás nuevamente ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;    public function download(){
        if(!$this-&amp;gt;downloadFile(app_path()."/files/terminos.pdf")){
            return redirect()-&amp;gt;back();
        }
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalmente probaremos en el Panel de Control de usuario esta nueva opción.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s1600/Laravel-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s320/Laravel-5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/12/22-tutorial-de-laravel-5-download-files.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/gG1mBt9LnDI/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-230579777997095062</guid><pubDate>Thu, 03 Dec 2015 18:17:00 +0000</pubDate><atom:updated>2015-12-15T13:39:16.149+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laravel</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>21 - Tutorial de Laravel 5 - Public Profile (Perfil público de usuario)</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/wbqAQlQmGPg/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/wbqAQlQmGPg?feature=player_embedded" width="320"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En este capítulo del &lt;b&gt;Tutorial de Laravel 5 &lt;/b&gt;veremos un supuesto en el cual tenemos que crear un perfil público de usuario, a partir, de la aplicación desarrollada hasta el momento.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Lo primero será crear una nueva ruta en la cual se muestre el perfil, esta ruta se la agregaremos a los nombres de usuario que aparecen en las vistas &lt;i&gt;&lt;b&gt;home.blade.php&lt;/b&gt;&lt;/i&gt; y &lt;i&gt;&lt;b&gt;search.blade.php&lt;/b&gt;&lt;/i&gt;.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
En &lt;i&gt;&lt;b&gt;home.blade.php&lt;/b&gt;&lt;/i&gt; estas modificaciones las haremos en la sección para públicar comentarios y en la sección en la que se muestran los comentarios. Código completo de la vista &lt;i&gt;&lt;b&gt;home.blade.php&lt;/b&gt;&lt;/i&gt; ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;@extends('layouts.home')

@section('content')
&amp;lt;h1&amp;gt;Bienvenid@s a la aplicación Laravel&amp;lt;/h1&amp;gt;
&amp;lt;hr /&amp;gt;
@if (Session::has('status'))
 &amp;lt;div class="bg-success" style="padding: 20px;"&amp;gt;
  {{Session::get('status')}}
 &amp;lt;/div&amp;gt;
 &amp;lt;hr /&amp;gt;
@endif
@if (Session::has('error'))
 &amp;lt;div class="bg-danger" style="padding: 20px;"&amp;gt;
  {{Session::get('error')}}
 &amp;lt;/div&amp;gt;
 &amp;lt;hr /&amp;gt;
@endif
@if (Auth::check())
 &amp;lt;form method="post" action="{{url('user/createcomment')}}"&amp;gt;
  {{csrf_field()}}
  &amp;lt;div class="form-group"&amp;gt;
   &amp;lt;div class="row"&amp;gt;
    &amp;lt;div class="col-md-1"&amp;gt;
     &amp;lt;img src="{{url(Auth::user()-&amp;gt;perfiles)}}" class='img-responsive' style='max-width: 60px' /&amp;gt;
                                        &amp;lt;strong&amp;gt;&amp;lt;a href="{{url('home/user/'.Auth::user()-&amp;gt;id)}}"&amp;gt;{{Auth::user()-&amp;gt;name}}&amp;lt;/a&amp;gt;&amp;lt;/strong&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class="col-md-6"&amp;gt;
     &amp;lt;textarea name="comment" class="form-control"&amp;gt;&amp;lt;/textarea&amp;gt;
     &amp;lt;br /&amp;gt;
     &amp;lt;button type="submit" class="btn btn-primary"&amp;gt;Publicar&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
   &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
 &amp;lt;/form&amp;gt;
 &amp;lt;hr /&amp;gt;
        &amp;lt;?php 
        $comments = App\Comments::select()-&amp;gt;orderBy('id', 'desc')-&amp;gt;simplePaginate(5);
        $modal = 0;
        foreach($comments as $comment):
            $user = App\User::select()-&amp;gt;where('id', '=', $comment-&amp;gt;id_user)-&amp;gt;first();
        ?&amp;gt;
        &amp;lt;div class="row"&amp;gt;
            &amp;lt;div class="col-md-1"&amp;gt;
                &amp;lt;img src='{{url($user-&amp;gt;perfiles)}}' class='img-responsive' style='max-width: 60px' /&amp;gt;
                &amp;lt;strong&amp;gt;&amp;lt;a href="{{url('home/user/'.$user-&amp;gt;id)}}"&amp;gt;{{$user-&amp;gt;name}}&amp;lt;/a&amp;gt;&amp;lt;/strong&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class='col-md-6'&amp;gt;
               {{$comment-&amp;gt;comment}} 
               &amp;lt;br /&amp;gt;
               &amp;lt;i&amp;gt;Fecha: {{$comment-&amp;gt;date}} · Hora: {{$comment-&amp;gt;time}}&amp;lt;/i&amp;gt;
               
               
               
               @if($comment-&amp;gt;id_user == Auth::user()-&amp;gt;id)
               &amp;lt;hr /&amp;gt;
                &amp;lt;!-- Botón que abre la ventana modal eliminar --&amp;gt;
                &amp;lt;button type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteComment{{$modal}}"&amp;gt;
                  Eliminar
                &amp;lt;/button&amp;gt;

                &amp;lt;!-- Ventana modal para eliminar --&amp;gt;
                &amp;lt;div class="modal fade" id="deleteComment{{$modal}}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"&amp;gt;
                  &amp;lt;div class="modal-dialog" role="document"&amp;gt;
                    &amp;lt;div class="modal-content"&amp;gt;
                      &amp;lt;div class="modal-header"&amp;gt;
                        &amp;lt;button type="button" class="close" data-dismiss="modal" aria-label="Close"&amp;gt;&amp;lt;span aria-hidden="true"&amp;gt;×&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
                        &amp;lt;h4 class="modal-title" id="myModalLabel"&amp;gt;¿Realmente quieres eliminar este comentario?&amp;lt;/h4&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-body"&amp;gt;
                        &amp;lt;form method="post" action="{{url('user/deletecomment')}}"&amp;gt;
                            {{csrf_field()}}
                            &amp;lt;input type="hidden" name="id_comment" value="{{$comment-&amp;gt;id}}" /&amp;gt;
                            &amp;lt;button type="submit" class="btn btn-danger"&amp;gt;Eliminar&amp;lt;/button&amp;gt;
                        &amp;lt;/form&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-footer"&amp;gt;
                        &amp;lt;button type="button" class="btn btn-default" data-dismiss="modal"&amp;gt;Cerrar&amp;lt;/button&amp;gt;
                      &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                  &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;

                &amp;lt;!-- Botón para abrir la ventana modal de editar --&amp;gt;
                &amp;lt;button type="button" class="btn btn-primary" data-toggle="modal" data-target="#editComment{{$modal}}"&amp;gt;
                  Editar
                &amp;lt;/button&amp;gt;

                &amp;lt;!-- Ventana modal editar --&amp;gt;
                &amp;lt;div class="modal fade" id="editComment{{$modal}}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"&amp;gt;
                  &amp;lt;div class="modal-dialog" role="document"&amp;gt;
                    &amp;lt;div class="modal-content"&amp;gt;
                      &amp;lt;div class="modal-header"&amp;gt;
                        &amp;lt;button type="button" class="close" data-dismiss="modal" aria-label="Close"&amp;gt;&amp;lt;span aria-hidden="true"&amp;gt;×&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
                        &amp;lt;h4 class="modal-title" id="myModalLabel"&amp;gt;Editar comentario&amp;lt;/h4&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-body"&amp;gt;
                        &amp;lt;form method="post" action="{{url('user/editcomment')}}"&amp;gt;
                            {{csrf_field()}}
                            &amp;lt;div class="form-group"&amp;gt;
                            &amp;lt;textarea name="comment" rows="10" class="form-control"&amp;gt;{{$comment-&amp;gt;comment}}&amp;lt;/textarea&amp;gt;
                            &amp;lt;/div&amp;gt;
                            &amp;lt;input type="hidden" name="id_comment" value="{{$comment-&amp;gt;id}}" /&amp;gt;
                            &amp;lt;button type="submit" class="btn btn-primary"&amp;gt;Editar&amp;lt;/button&amp;gt;
                        &amp;lt;/form&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-footer"&amp;gt;
                        &amp;lt;button type="button" class="btn btn-default" data-dismiss="modal"&amp;gt;Cerrar&amp;lt;/button&amp;gt;
                      &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                  &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;?php $modal++ ?&amp;gt;
               @endif
            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;hr /&amp;gt;
        &amp;lt;?php endforeach ?&amp;gt;
        &amp;lt;div class='text-center'&amp;gt;
        &amp;lt;?php /*Nuevo*/ $comments-&amp;gt;setPath('') ?&amp;gt;
        &amp;lt;?php echo $comments-&amp;gt;render() ?&amp;gt;
           &amp;lt;p&amp;gt;Página {{$comments-&amp;gt;currentPage()}}&amp;lt;/p&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
@else
 &amp;lt;hr /&amp;gt;
 &amp;lt;p class="bg-info" style="padding: 20px;"&amp;gt;Para poder publicar comentarios tienes que &amp;lt;a href="{{url('auth/login')}}"&amp;gt;iniciar sesión&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;
 &amp;lt;hr /&amp;gt;
@endif
@stop
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En la vista &lt;i&gt;&lt;b&gt;search.blade.php&lt;/b&gt;&lt;/i&gt; esta modificación será realizada sólo en la sección donde se muestran los comentarios:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;@extends('layouts.home')
@section('search', $search)
@section('content')
&amp;lt;h3&amp;gt;Resultado de la búsqueda: {{$search}}&amp;lt;/h3&amp;gt;
@if (isset($message))
&amp;lt;div class='bg-warning' style='padding: 20px'&amp;gt;
    {{$message}}
&amp;lt;/div&amp;gt;
@endif
&amp;lt;hr /&amp;gt;
@if (isset($comments))
&amp;lt;?php 
        $modal = 0;
        foreach($comments as $comment):
            $user = App\User::select()-&amp;gt;where('id', '=', $comment-&amp;gt;id_user)-&amp;gt;first();
        ?&amp;gt;
        &amp;lt;div class="row"&amp;gt;
            &amp;lt;div class="col-md-1"&amp;gt;
                &amp;lt;img src='{{url($user-&amp;gt;perfiles)}}' class='img-responsive' style='max-width: 60px' /&amp;gt;
                &amp;lt;strong&amp;gt;&amp;lt;a href="{{url('home/user/'.$user-&amp;gt;id)}}"&amp;gt;{{$user-&amp;gt;name}}&amp;lt;/a&amp;gt;&amp;lt;/strong&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class='col-md-6'&amp;gt;
               {{$comment-&amp;gt;comment}} 
               &amp;lt;br /&amp;gt;
               &amp;lt;i&amp;gt;Fecha: {{$comment-&amp;gt;date}} · Hora: {{$comment-&amp;gt;time}}&amp;lt;/i&amp;gt;
               
               
               @if(isset(Auth::user()-&amp;gt;id))
               @if($comment-&amp;gt;id_user == Auth::user()-&amp;gt;id)
               &amp;lt;hr /&amp;gt;
                &amp;lt;!-- Botón que abre la ventana modal eliminar --&amp;gt;
                &amp;lt;button type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteComment{{$modal}}"&amp;gt;
                  Eliminar
                &amp;lt;/button&amp;gt;

                &amp;lt;!-- Ventana modal para eliminar --&amp;gt;
                &amp;lt;div class="modal fade" id="deleteComment{{$modal}}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"&amp;gt;
                  &amp;lt;div class="modal-dialog" role="document"&amp;gt;
                    &amp;lt;div class="modal-content"&amp;gt;
                      &amp;lt;div class="modal-header"&amp;gt;
                        &amp;lt;button type="button" class="close" data-dismiss="modal" aria-label="Close"&amp;gt;&amp;lt;span aria-hidden="true"&amp;gt;×&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
                        &amp;lt;h4 class="modal-title" id="myModalLabel"&amp;gt;¿Realmente quieres eliminar este comentario?&amp;lt;/h4&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-body"&amp;gt;
                        &amp;lt;form method="post" action="{{url('user/deletecomment')}}"&amp;gt;
                            {{csrf_field()}}
                            &amp;lt;input type="hidden" name="id_comment" value="{{$comment-&amp;gt;id}}" /&amp;gt;
                            &amp;lt;button type="submit" class="btn btn-danger"&amp;gt;Eliminar&amp;lt;/button&amp;gt;
                        &amp;lt;/form&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-footer"&amp;gt;
                        &amp;lt;button type="button" class="btn btn-default" data-dismiss="modal"&amp;gt;Cerrar&amp;lt;/button&amp;gt;
                      &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                  &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;

                &amp;lt;!-- Botón para abrir la ventana modal de editar --&amp;gt;
                &amp;lt;button type="button" class="btn btn-primary" data-toggle="modal" data-target="#editComment{{$modal}}"&amp;gt;
                  Editar
                &amp;lt;/button&amp;gt;

                &amp;lt;!-- Ventana modal editar --&amp;gt;
                &amp;lt;div class="modal fade" id="editComment{{$modal}}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"&amp;gt;
                  &amp;lt;div class="modal-dialog" role="document"&amp;gt;
                    &amp;lt;div class="modal-content"&amp;gt;
                      &amp;lt;div class="modal-header"&amp;gt;
                        &amp;lt;button type="button" class="close" data-dismiss="modal" aria-label="Close"&amp;gt;&amp;lt;span aria-hidden="true"&amp;gt;×&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
                        &amp;lt;h4 class="modal-title" id="myModalLabel"&amp;gt;Editar comentario&amp;lt;/h4&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-body"&amp;gt;
                        &amp;lt;form method="post" action="{{url('user/editcomment')}}"&amp;gt;
                            {{csrf_field()}}
                            &amp;lt;div class="form-group"&amp;gt;
                            &amp;lt;textarea name="comment" rows="10" class="form-control"&amp;gt;{{$comment-&amp;gt;comment}}&amp;lt;/textarea&amp;gt;
                            &amp;lt;/div&amp;gt;
                            &amp;lt;input type="hidden" name="id_comment" value="{{$comment-&amp;gt;id}}" /&amp;gt;
                            &amp;lt;button type="submit" class="btn btn-primary"&amp;gt;Editar&amp;lt;/button&amp;gt;
                        &amp;lt;/form&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-footer"&amp;gt;
                        &amp;lt;button type="button" class="btn btn-default" data-dismiss="modal"&amp;gt;Cerrar&amp;lt;/button&amp;gt;
                      &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                  &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;?php $modal++ ?&amp;gt;
               @endif
      @endif
            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;hr /&amp;gt;
        &amp;lt;?php endforeach ?&amp;gt;
        &amp;lt;?php
        $currentPage = $comments-&amp;gt;currentPage(); //Página actual
        $maxPages = $currentPage + 3; //Máxima numeración de páginas
        $firstPage = 1; //primera página
        $lastPage = $comments-&amp;gt;lastPage(); //última página
        $nextPage = $currentPage+1; //Siguiente página
        $forwardPage = $currentPage-1; //Página anterior
        $comments-&amp;gt;setPath('');
        ?&amp;gt;
&amp;lt;ul class="pagination"&amp;gt;
        &amp;lt;!-- Botón para navegar a la primera página --&amp;gt;
        &amp;lt;li class="@if($currentPage==$firstPage){{'disabled'}}@endif"&amp;gt;
                &amp;lt;a href="@if($currentPage&amp;gt;1){{$comments-&amp;gt;url($firstPage)}}@else{{'#'}}@endif" class='btn'&amp;gt;Primera&amp;lt;/a&amp;gt;
        &amp;lt;/li&amp;gt;
        &amp;lt;!-- Botón para navegar a la página anterior --&amp;gt;
        &amp;lt;li class="@if($currentPage==$firstPage){{'disabled'}}@endif"&amp;gt;
                &amp;lt;a href="@if($currentPage&amp;gt;1){{$comments-&amp;gt;url($forwardPage)}}@else{{'#'}}@endif" class='btn'&amp;gt;«&amp;lt;/a&amp;gt;
        &amp;lt;/li&amp;gt;
        &amp;lt;!-- Mostrar la numeración de páginas, partiendo de la página actual hasta el máximo definido en $maxPages --&amp;gt;
        @for($x=$currentPage;$x&amp;lt;$maxPages;$x++)
                @if($x &amp;lt;= $lastPage)
                &amp;lt;li class="@if($x==$currentPage){{'active'}}@endif"&amp;gt;
                        &amp;lt;a href="{{$comments-&amp;gt;url($x)}}" class='btn'&amp;gt;{{$x}}&amp;lt;/a&amp;gt;
                &amp;lt;/li&amp;gt;
                @endif
        @endfor
        &amp;lt;!-- Botón para navegar a la pagina siguiente --&amp;gt;
        &amp;lt;li class="@if($currentPage==$lastPage){{'disabled'}}@endif"&amp;gt;
                &amp;lt;a href="@if($currentPage&amp;lt;$lastPage){{$comments-&amp;gt;url($nextPage)}}@else{{'#'}}@endif" class='btn'&amp;gt;»&amp;lt;/a&amp;gt;
        &amp;lt;/li&amp;gt;
        &amp;lt;!-- Botón para navegar a la última página --&amp;gt;
        &amp;lt;li class="@if($currentPage==$lastPage){{'disabled'}}@endif"&amp;gt;
                &amp;lt;a href="@if($currentPage&amp;lt;$lastPage){{$comments-&amp;gt;url($lastPage)}}@else{{'#'}}@endif" class='btn'&amp;gt;Última&amp;lt;/a&amp;gt;
        &amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
@endif
@stop
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
A continuación crearemos la nueva ruta en &lt;i&gt;&lt;b&gt;routes.php&lt;/b&gt;&lt;/i&gt;, en esta ruta capturaremos el id del usuario, el id es validado para aceptar sólo números enteros:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;Route::get("home/user/{id}", "HomeController@user")-&amp;gt;where(['id' =&amp;gt; '[0-9]+']);
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
A continuación crearemos la nueva acción "&lt;i&gt;&lt;b&gt;user&lt;/b&gt;&lt;/i&gt;" en HomeController, pero antes importaremos la clase user al controlador: &lt;span style="font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;"&gt;use App\User;&lt;/span&gt;, en la nueva acción realizaremos una consulta buscando al usuario a través del id enviado, si el usuario no existe redireccionamos atrás, de lo contrario mostramos una nueva vista "user" y le pasamos la información del usuario.
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;    public function user($id){
        $user = User::select()
                -&amp;gt;where('id', '=', $id)
                -&amp;gt;first();
        if (count($user) == 0){
            return redirect()-&amp;gt;back();
        }
        else{
            return View('home.user')-&amp;gt;with('user', $user);
        }
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
A continuación crearemos la nueva vista "&lt;i&gt;&lt;b&gt;user.blade.php&lt;/b&gt;&lt;/i&gt;" en la carpeta "&lt;i&gt;&lt;b&gt;home&lt;/b&gt;&lt;/i&gt;" con el siguiente código:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;@extends('layouts.home')
@section('content')
&amp;lt;h1&amp;gt;Perfil público de &amp;lt;a href="{{url('home/user/'.$user-&amp;gt;id)}}"&amp;gt;{{$user-&amp;gt;name}}&amp;lt;/a&amp;gt;&amp;lt;/h1&amp;gt;
&amp;lt;img src="{{url($user-&amp;gt;perfiles)}}" class="img-responsive" style="max-width: 150px" /&amp;gt;
&amp;lt;hr /&amp;gt;
@if(Session::has('status'))
 &amp;lt;div class="bg-info" style="padding: 20px"&amp;gt;{{Session::get('status')}}&amp;lt;/div&amp;gt;
 &amp;lt;hr /&amp;gt;
@endif
@if(Session::has('error'))
 &amp;lt;div class="bg-danger" style="padding: 20px"&amp;gt;{{Session::get('error')}}&amp;lt;/div&amp;gt;
 &amp;lt;hr /&amp;gt;
@endif
&amp;lt;!-- Si el usuario está autenticado --&amp;gt;
@if (Auth::check())
 &amp;lt;!-- Y este es su id de perfil posibilitar la creación de comentarios --&amp;gt;
 @if($user-&amp;gt;id == Auth::user()-&amp;gt;id)
 &amp;lt;form method="post" action="{{url('user/createcomment')}}"&amp;gt;
  {{csrf_field()}}
  &amp;lt;div class="form-group"&amp;gt;
   &amp;lt;div class="row"&amp;gt;
    &amp;lt;div class="col-md-1"&amp;gt;
     &amp;lt;img src="{{url(Auth::user()-&amp;gt;perfiles)}}" class='img-responsive' style='max-width: 60px' /&amp;gt;
     &amp;lt;strong&amp;gt;&amp;lt;a href="{{url('home/user/'.Auth::user()-&amp;gt;id)}}"&amp;gt;{{Auth::user()-&amp;gt;name}}&amp;lt;/a&amp;gt;&amp;lt;/strong&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class="col-md-6"&amp;gt;
     &amp;lt;textarea name="comment" class="form-control"&amp;gt;&amp;lt;/textarea&amp;gt;
     &amp;lt;br /&amp;gt;
     &amp;lt;button type="submit" class="btn btn-primary"&amp;gt;Publicar&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
   &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
 &amp;lt;/form&amp;gt;
 &amp;lt;hr /&amp;gt;
 @endif
@endif
 &amp;lt;!-- Seleccionar los comentarios del usuario --&amp;gt;
 &amp;lt;?php 
  $modal = 0;
  $comments = App\Comments::where('id_user', '=', $user-&amp;gt;id)-&amp;gt;orderBy('id', 'desc')-&amp;gt;simplePaginate(5);
  foreach($comments as $comment):
 ?&amp;gt;
  &amp;lt;div class="row"&amp;gt;
            &amp;lt;div class="col-md-1"&amp;gt;
                &amp;lt;img src='{{url($user-&amp;gt;perfiles)}}' class='img-responsive' style='max-width: 60px' /&amp;gt;
                &amp;lt;strong&amp;gt;&amp;lt;a href="{{url('home/user/'.$user-&amp;gt;id)}}"&amp;gt;{{$user-&amp;gt;name}}&amp;lt;/a&amp;gt;&amp;lt;/strong&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class='col-md-6'&amp;gt;
               {{$comment-&amp;gt;comment}} 
               &amp;lt;br /&amp;gt;
               &amp;lt;i&amp;gt;Fecha: {{$comment-&amp;gt;date}} · Hora: {{$comment-&amp;gt;time}}&amp;lt;/i&amp;gt;
      
      &amp;lt;!-- Si el usuario está autenticado, es decir, la propiedad id existe --&amp;gt;
      @if(isset(Auth::user()-&amp;gt;id))
      &amp;lt;!-- Si el usuario está autenticado agregar las opciones editar y eliminar cuando visite en su perfil --&amp;gt;
               @if($comment-&amp;gt;id_user == Auth::user()-&amp;gt;id)
               &amp;lt;hr /&amp;gt;
                &amp;lt;!-- Botón que abre la ventana modal eliminar --&amp;gt;
                &amp;lt;button type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteComment{{$modal}}"&amp;gt;
                  Eliminar
                &amp;lt;/button&amp;gt;

                &amp;lt;!-- Ventana modal para eliminar --&amp;gt;
                &amp;lt;div class="modal fade" id="deleteComment{{$modal}}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"&amp;gt;
                  &amp;lt;div class="modal-dialog" role="document"&amp;gt;
                    &amp;lt;div class="modal-content"&amp;gt;
                      &amp;lt;div class="modal-header"&amp;gt;
                        &amp;lt;button type="button" class="close" data-dismiss="modal" aria-label="Close"&amp;gt;&amp;lt;span aria-hidden="true"&amp;gt;×&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
                        &amp;lt;h4 class="modal-title" id="myModalLabel"&amp;gt;¿Realmente quieres eliminar este comentario?&amp;lt;/h4&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-body"&amp;gt;
                        &amp;lt;form method="post" action="{{url('user/deletecomment')}}"&amp;gt;
                            {{csrf_field()}}
                            &amp;lt;input type="hidden" name="id_comment" value="{{$comment-&amp;gt;id}}" /&amp;gt;
                            &amp;lt;button type="submit" class="btn btn-danger"&amp;gt;Eliminar&amp;lt;/button&amp;gt;
                        &amp;lt;/form&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-footer"&amp;gt;
                        &amp;lt;button type="button" class="btn btn-default" data-dismiss="modal"&amp;gt;Cerrar&amp;lt;/button&amp;gt;
                      &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                  &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;

                &amp;lt;!-- Botón para abrir la ventana modal de editar --&amp;gt;
                &amp;lt;button type="button" class="btn btn-primary" data-toggle="modal" data-target="#editComment{{$modal}}"&amp;gt;
                  Editar
                &amp;lt;/button&amp;gt;

                &amp;lt;!-- Ventana modal editar --&amp;gt;
                &amp;lt;div class="modal fade" id="editComment{{$modal}}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"&amp;gt;
                  &amp;lt;div class="modal-dialog" role="document"&amp;gt;
                    &amp;lt;div class="modal-content"&amp;gt;
                      &amp;lt;div class="modal-header"&amp;gt;
                        &amp;lt;button type="button" class="close" data-dismiss="modal" aria-label="Close"&amp;gt;&amp;lt;span aria-hidden="true"&amp;gt;×&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
                        &amp;lt;h4 class="modal-title" id="myModalLabel"&amp;gt;Editar comentario&amp;lt;/h4&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-body"&amp;gt;
                        &amp;lt;form method="post" action="{{url('user/editcomment')}}"&amp;gt;
                            {{csrf_field()}}
                            &amp;lt;div class="form-group"&amp;gt;
                            &amp;lt;textarea name="comment" rows="10" class="form-control"&amp;gt;{{$comment-&amp;gt;comment}}&amp;lt;/textarea&amp;gt;
                            &amp;lt;/div&amp;gt;
                            &amp;lt;input type="hidden" name="id_comment" value="{{$comment-&amp;gt;id}}" /&amp;gt;
                            &amp;lt;button type="submit" class="btn btn-primary"&amp;gt;Editar&amp;lt;/button&amp;gt;
                        &amp;lt;/form&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-footer"&amp;gt;
                        &amp;lt;button type="button" class="btn btn-default" data-dismiss="modal"&amp;gt;Cerrar&amp;lt;/button&amp;gt;
                      &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                  &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;?php $modal++ ?&amp;gt;
               @endif
      @endif
   &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;hr /&amp;gt;
 &amp;lt;?php endforeach ?&amp;gt;
 
 &amp;lt;!-- Agregar la paginación simple --&amp;gt;
 &amp;lt;div class='text-center'&amp;gt;
 &amp;lt;?php /*Nuevo*/ $comments-&amp;gt;setPath('') ?&amp;gt;
 &amp;lt;?php echo $comments-&amp;gt;render() ?&amp;gt;
    &amp;lt;p&amp;gt;Página {{$comments-&amp;gt;currentPage()}}&amp;lt;/p&amp;gt;
 &amp;lt;/div&amp;gt;
 &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;

@stop

&lt;/pre&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
En el perfil público de usuario se realizan distintas comprobaciones, una de ellas es verificar si el perfil pertenece al usuario actualmente autenticado, de ser así, se le incluye el formulario para crear comentarios y a la lista de comentarios las opciones de editar y eliminar.
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Otra cosa, es el manejo de las variables flash 'status' y 'error' al inicio de la vista, esto permitirá que si el usuario realiza alguna acción como crear, editar o eliminar se le muestra esa información. Para que esto ocurra habrá que realizar unas pequeñas modificaciones en las acciones &lt;span style="color: yellow;"&gt;&lt;i&gt;&lt;b&gt;createComment, deleteComment y editComment&lt;/b&gt;&lt;/i&gt;&lt;/span&gt; del controlador UserController, modificando las redirecciones, en lugar de redireccionar a "home", redireccionar atrás con el método "&lt;i&gt;&lt;b&gt;back()&lt;/b&gt;&lt;/i&gt;", simplemente tenemos que reemplazar:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;return redirect('home')-&amp;gt;...
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Por ...
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;return redirect()-&amp;gt;back()-&amp;gt;...
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Otra cosa es mostrar la opción de ir al perfil público en el panel del usuario, abrir la vista "&lt;i&gt;&lt;b&gt;user.blade.php&lt;/b&gt;&lt;/i&gt;" de la carpeta "&lt;i&gt;&lt;b&gt;user&lt;/b&gt;&lt;/i&gt;" e incluirla ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;    &amp;lt;li&amp;gt;&amp;lt;a href="{{url('home/user/'.Auth::user()-&amp;gt;id)}}"&amp;gt;Ir a mi perfil público&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s1600/Laravel-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s320/Laravel-5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/12/21-tutorial-de-laravel-5-public-profile.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/wbqAQlQmGPg/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-6554248943605413033</guid><pubDate>Wed, 02 Dec 2015 20:48:00 +0000</pubDate><atom:updated>2015-12-02T23:58:22.585+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laravel</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>20 - Tutorial de Laravel 5 - Pagination (Paginación personalizada)</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/7YA_IHkVGtI/0.jpg" src="https://www.youtube.com/embed/7YA_IHkVGtI?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
En esta parte del &lt;i&gt;&lt;b&gt;Tutorial de Laravel 5&lt;/b&gt;&lt;/i&gt; continuamos viendo la paginación, concretamente utilizaremos los &lt;a href="http://laravel.com/docs/5.1/pagination" target="_blank"&gt;helpers&lt;/a&gt; para crear una paginación personalizada.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Esta paginación tendrá el siguiente formato:&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsDIUOZMZJnn9sA73VbolbVQ3VhY4xsKO5tLhA2H7d5xamwowZM2qL1271U-3Tn8ilLmZWA5xjFn2UQx3Ce7-GNmVPOT_YRsHdfKS-QIKGkaHbctLzrdmi4aA9jYjkpXcY90IzJt4iNBM/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsDIUOZMZJnn9sA73VbolbVQ3VhY4xsKO5tLhA2H7d5xamwowZM2qL1271U-3Tn8ilLmZWA5xjFn2UQx3Ce7-GNmVPOT_YRsHdfKS-QIKGkaHbctLzrdmi4aA9jYjkpXcY90IzJt4iNBM/s1600/1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Previamente incluiremos el método &lt;i&gt;&lt;b&gt;setPath&lt;/b&gt;&lt;/i&gt; a la paginación con la cual trabajamos en el &lt;a href="http://jquery-manual.blogspot.com/2015/12/19-tutorial-de-laravel-5-paginate-y.html" target="_blank"&gt;capítulo anterior&lt;/a&gt;, este método nos permitirá generar las rutas para los links correctamente. Código modificado en la vista "&lt;i&gt;&lt;b&gt;home&lt;/b&gt;&lt;/i&gt;" ... 
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;div class='text-center'&amp;gt;
&amp;lt;?php /*Nuevo*/ $comments-&amp;gt;setPath('') ?&amp;gt;
&amp;lt;?php echo $comments-&amp;gt;render() ?&amp;gt;
   &amp;lt;p&amp;gt;Página {{$comments-&amp;gt;currentPage()}}&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Empezamos a crear la &lt;i&gt;&lt;b&gt;paginación personalizada&lt;/b&gt;&lt;/i&gt;. En la acción &lt;i&gt;&lt;b&gt;search&lt;/b&gt;&lt;/i&gt; del controlador &lt;i&gt;&lt;b&gt;HomeController&lt;/b&gt;&lt;/i&gt; reemplazamos el método &lt;i&gt;&lt;b&gt;get&lt;/b&gt;&lt;/i&gt; de la consulta por el método paginate:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;$comments = Comments::select()
  -&amp;gt;where('comment', 'LIKE', '%'.$search.'%')
  -&amp;gt;orderBy('id', 'desc')
  -&amp;gt;paginate(3);
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En la vista "&lt;i&gt;&lt;b&gt;search&lt;/b&gt;&lt;/i&gt;" utilizamos los &lt;a href="http://laravel.com/docs/5.1/pagination" target="_blank"&gt;helpers&lt;/a&gt; para crear una serie de variables, que posteriormente nos serviran para crear los links de la paginación, código completo de la vista "&lt;i&gt;&lt;b&gt;search&lt;/b&gt;&lt;/i&gt;" ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;@extends('layouts.home')
@section('search', $search)
@section('content')
&amp;lt;h3&amp;gt;Resultado de la búsqueda: {{$search}}&amp;lt;/h3&amp;gt;
@if (isset($message))
&amp;lt;div class='bg-warning' style='padding: 20px'&amp;gt;
    {{$message}}
&amp;lt;/div&amp;gt;
@endif
&amp;lt;hr /&amp;gt;
@if (isset($comments))
&amp;lt;?php 
        $modal = 0;
        foreach($comments as $comment):
            $user = App\User::select()-&amp;gt;where('id', '=', $comment-&amp;gt;id_user)-&amp;gt;first();
        ?&amp;gt;
        &amp;lt;div class="row"&amp;gt;
            &amp;lt;div class="col-md-1"&amp;gt;
                &amp;lt;img src='{{url($user-&amp;gt;perfiles)}}' class='img-responsive' style='max-width: 60px' /&amp;gt;
                &amp;lt;strong&amp;gt;{{$user-&amp;gt;name}}&amp;lt;/strong&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class='col-md-6'&amp;gt;
               {{$comment-&amp;gt;comment}} 
               &amp;lt;br /&amp;gt;
               &amp;lt;i&amp;gt;Fecha: {{$comment-&amp;gt;date}} · Hora: {{$comment-&amp;gt;time}}&amp;lt;/i&amp;gt;
               
               
               @if(isset(Auth::user()-&amp;gt;id))
               @if($comment-&amp;gt;id_user == Auth::user()-&amp;gt;id)
               &amp;lt;hr /&amp;gt;
                &amp;lt;!-- Botón que abre la ventana modal eliminar --&amp;gt;
                &amp;lt;button type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteComment{{$modal}}"&amp;gt;
                  Eliminar
                &amp;lt;/button&amp;gt;

                &amp;lt;!-- Ventana modal para eliminar --&amp;gt;
                &amp;lt;div class="modal fade" id="deleteComment{{$modal}}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"&amp;gt;
                  &amp;lt;div class="modal-dialog" role="document"&amp;gt;
                    &amp;lt;div class="modal-content"&amp;gt;
                      &amp;lt;div class="modal-header"&amp;gt;
                        &amp;lt;button type="button" class="close" data-dismiss="modal" aria-label="Close"&amp;gt;&amp;lt;span aria-hidden="true"&amp;gt;×&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
                        &amp;lt;h4 class="modal-title" id="myModalLabel"&amp;gt;¿Realmente quieres eliminar este comentario?&amp;lt;/h4&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-body"&amp;gt;
                        &amp;lt;form method="post" action="{{url('user/deletecomment')}}"&amp;gt;
                            {{csrf_field()}}
                            &amp;lt;input type="hidden" name="id_comment" value="{{$comment-&amp;gt;id}}" /&amp;gt;
                            &amp;lt;button type="submit" class="btn btn-danger"&amp;gt;Eliminar&amp;lt;/button&amp;gt;
                        &amp;lt;/form&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-footer"&amp;gt;
                        &amp;lt;button type="button" class="btn btn-default" data-dismiss="modal"&amp;gt;Cerrar&amp;lt;/button&amp;gt;
                      &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                  &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;

                &amp;lt;!-- Botón para abrir la ventana modal de editar --&amp;gt;
                &amp;lt;button type="button" class="btn btn-primary" data-toggle="modal" data-target="#editComment{{$modal}}"&amp;gt;
                  Editar
                &amp;lt;/button&amp;gt;

                &amp;lt;!-- Ventana modal editar --&amp;gt;
                &amp;lt;div class="modal fade" id="editComment{{$modal}}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"&amp;gt;
                  &amp;lt;div class="modal-dialog" role="document"&amp;gt;
                    &amp;lt;div class="modal-content"&amp;gt;
                      &amp;lt;div class="modal-header"&amp;gt;
                        &amp;lt;button type="button" class="close" data-dismiss="modal" aria-label="Close"&amp;gt;&amp;lt;span aria-hidden="true"&amp;gt;×&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
                        &amp;lt;h4 class="modal-title" id="myModalLabel"&amp;gt;Editar comentario&amp;lt;/h4&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-body"&amp;gt;
                        &amp;lt;form method="post" action="{{url('user/editcomment')}}"&amp;gt;
                            {{csrf_field()}}
                            &amp;lt;div class="form-group"&amp;gt;
                            &amp;lt;textarea name="comment" rows="10" class="form-control"&amp;gt;{{$comment-&amp;gt;comment}}&amp;lt;/textarea&amp;gt;
                            &amp;lt;/div&amp;gt;
                            &amp;lt;input type="hidden" name="id_comment" value="{{$comment-&amp;gt;id}}" /&amp;gt;
                            &amp;lt;button type="submit" class="btn btn-primary"&amp;gt;Editar&amp;lt;/button&amp;gt;
                        &amp;lt;/form&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-footer"&amp;gt;
                        &amp;lt;button type="button" class="btn btn-default" data-dismiss="modal"&amp;gt;Cerrar&amp;lt;/button&amp;gt;
                      &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                  &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;?php $modal++ ?&amp;gt;
               @endif
      @endif
            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;hr /&amp;gt;
        &amp;lt;?php endforeach ?&amp;gt;
        &amp;lt;?php
        $currentPage = $comments-&amp;gt;currentPage(); //Página actual
        $maxPages = $currentPage + 3; //Máxima numeración de páginas
        $firstPage = 1; //primera página
        $lastPage = $comments-&amp;gt;lastPage(); //última página
        $nextPage = $currentPage+1; //Siguiente página
        $forwardPage = $currentPage-1; //Página anterior
        $comments-&amp;gt;setPath('');
        ?&amp;gt;
&amp;lt;ul class="pagination"&amp;gt;
        &amp;lt;!-- Botón para navegar a la primera página --&amp;gt;
        &amp;lt;li class="@if($currentPage==$firstPage){{'disabled'}}@endif"&amp;gt;
                &amp;lt;a href="@if($currentPage&amp;gt;1){{$comments-&amp;gt;url($firstPage)}}@else{{'#'}}@endif" class='btn'&amp;gt;Primera&amp;lt;/a&amp;gt;
        &amp;lt;/li&amp;gt;
        &amp;lt;!-- Botón para navegar a la página anterior --&amp;gt;
        &amp;lt;li class="@if($currentPage==$firstPage){{'disabled'}}@endif"&amp;gt;
                &amp;lt;a href="@if($currentPage&amp;gt;1){{$comments-&amp;gt;url($forwardPage)}}@else{{'#'}}@endif" class='btn'&amp;gt;«&amp;lt;/a&amp;gt;
        &amp;lt;/li&amp;gt;
        &amp;lt;!-- Mostrar la numeración de páginas, partiendo de la página actual hasta el máximo definido en $maxPages --&amp;gt;
        @for($x=$currentPage;$x&amp;lt;$maxPages;$x++)
                @if($x &amp;lt;= $lastPage)
                &amp;lt;li class="@if($x==$currentPage){{'active'}}@endif"&amp;gt;
                        &amp;lt;a href="{{$comments-&amp;gt;url($x)}}" class='btn'&amp;gt;{{$x}}&amp;lt;/a&amp;gt;
                &amp;lt;/li&amp;gt;
                @endif
        @endfor
        &amp;lt;!-- Botón para navegar a la pagina siguiente --&amp;gt;
        &amp;lt;li class="@if($currentPage==$lastPage){{'disabled'}}@endif"&amp;gt;
                &amp;lt;a href="@if($currentPage&amp;lt;$lastPage){{$comments-&amp;gt;url($nextPage)}}@else{{'#'}}@endif" class='btn'&amp;gt;»&amp;lt;/a&amp;gt;
        &amp;lt;/li&amp;gt;
        &amp;lt;!-- Botón para navegar a la última página --&amp;gt;
        &amp;lt;li class="@if($currentPage==$lastPage){{'disabled'}}@endif"&amp;gt;
                &amp;lt;a href="@if($currentPage&amp;lt;$lastPage){{$comments-&amp;gt;url($lastPage)}}@else{{'#'}}@endif" class='btn'&amp;gt;Última&amp;lt;/a&amp;gt;
        &amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
@endif
@stop
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Ahora prueben la páginación al realizar búsquedas.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s1600/Laravel-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s320/Laravel-5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/12/20-tutorial-de-laravel-5-pagination.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/7YA_IHkVGtI/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-6980297940503688892</guid><pubDate>Wed, 02 Dec 2015 16:42:00 +0000</pubDate><atom:updated>2015-12-02T17:54:47.426+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laravel</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>19 - Tutorial de Laravel 5 - paginate y simplePaginate (Paginación de resultados)</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/PTWoPYJ-syo/0.jpg" src="https://www.youtube.com/embed/PTWoPYJ-syo?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En este capítulo del &lt;i&gt;&lt;b&gt;Tutorial de Laravel 5&lt;/b&gt;&lt;/i&gt; veremos como incluir una paginación de resultados haciendo uso de los métodos &lt;i&gt;&lt;b&gt;paginate&lt;/b&gt;&lt;/i&gt; y &lt;i&gt;&lt;b&gt;simplePaginate&lt;/b&gt;&lt;/i&gt; que nos ofrece laravel por defecto.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
En el vídeo se hace una mención respecto al formulario de búsqueda del capítulo anterior para mostrar el valor de la búsqueda en el campo de texto. Esta modificación es realizada en el layout "&lt;i&gt;&lt;b&gt;home&lt;/b&gt;&lt;/i&gt;"  ...
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;input type="text" class="form-control" name='search' placeholder="Buscar ..." value='@yield("search")' /&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Y en la vista "s&lt;i&gt;&lt;b&gt;earch&lt;/b&gt;&lt;/i&gt;", es decir, donde se muestran los resultados de la búsqueda, damos valor a la variable "search" creada con &lt;i&gt;&lt;b&gt;@yield&lt;/b&gt;&lt;/i&gt; ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;@section('search', $search)
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
La paginación de resultados será mostrada en la página de inicio "&lt;i&gt;&lt;b&gt;home&lt;/b&gt;&lt;/i&gt;", en la cual estamos mostrando los comentarios realizados por los usuarios autenticados. Más información en la &lt;a href="http://laravel.com/docs/5.1/pagination" target="_blank"&gt;documentación oficial de Laravel&lt;/a&gt;.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Primero veremos un ejemplo con el método "&lt;i&gt;&lt;b&gt;paginate&lt;/b&gt;&lt;/i&gt;", para ello simplemente modificar en la vista "&lt;i&gt;&lt;b&gt;home&lt;/b&gt;&lt;/i&gt;" lo siguiente ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;$comments = App\Comments::select()-&amp;gt;orderBy('id', 'desc')-&amp;gt;get();
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Por esto otro ...
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;$comments = App\Comments::select()-&amp;gt;orderBy('id', 'desc')-&amp;gt;paginate(5);
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Como podéis ver sólo hemos modificado el método get por paginate(número de registros por página).
&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Y a continuación, justo después de donde se cierra el búcle foreach para extraer comentario a comentario, incluimos los links de páginación ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;        &amp;lt;div class='text-center'&amp;gt;
        &amp;lt;?php echo $comments-&amp;gt;render() ?&amp;gt;
           &amp;lt;p&amp;gt;Página {{$comments-&amp;gt;currentPage()}} de {{$comments-&amp;gt;lastPage()}}&amp;lt;/p&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Con el método &lt;i&gt;&lt;b&gt;render()&lt;/b&gt;&lt;/i&gt; mostramos los links y los métodos &lt;i&gt;&lt;b&gt;currentPage()&lt;/b&gt;&lt;/i&gt; y &lt;i&gt;&lt;b&gt;lastPage()&lt;/b&gt;&lt;/i&gt; forman parte de una serie de &lt;a href="http://laravel.com/docs/5.1/pagination" target="_blank"&gt;Helpers&lt;/a&gt; que nos proporciona laravel para obtener información de la paginación.
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
La otra demostración que se ve en el vídeo es el uso del método &lt;i&gt;&lt;b&gt;simplePaginate&lt;/b&gt;&lt;/i&gt;, esta paginación no muestra la numeración de las páginas y sólo muestra los botones para avanzar y retroceder.
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Para ver este ejemplo seguiremos el mismo procedimiento que antes, cambiar el método paginate por simplePaginate y donde mostramos los links quitamos el helper lastPage, ya que este helper no esta disponible para simplePaginate.
&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s1600/Laravel-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s320/Laravel-5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/12/19-tutorial-de-laravel-5-paginate-y.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/PTWoPYJ-syo/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-6261883745721040948</guid><pubDate>Tue, 01 Dec 2015 17:26:00 +0000</pubDate><atom:updated>2015-12-03T12:50:20.048+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laravel</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>18 - Tutorial de Laravel 5 - Search Form (Formulario de búsqueda)</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/c4HCfwbmSkI/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/c4HCfwbmSkI?feature=player_embedded" width="320"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En esta parte del &lt;i&gt;&lt;b&gt;Tutorial de Laravel 5&lt;/b&gt;&lt;/i&gt; integraremos un formulario de búsqueda al menú para poder realizar búsquedas entre los comentarios. Las búsquedas podrán ser realizadas por los usuarios autenticados e invitados, si en los resultados de búsqueda de un usuario autenticado aparece algún comentario suyo, entonces, le agregaremos las opciones de editar y eliminar.
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
El formulario lo integraremos al menú del layout "&lt;i&gt;&lt;b&gt;home.blade.php&lt;/b&gt;&lt;/i&gt;" ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;form class="navbar-form navbar-left" role="search" action="{{url('home/searchredirect')}}"&amp;gt;
 &amp;lt;div class="form-group"&amp;gt;
  &amp;lt;input type="text" class="form-control" name='search' placeholder="Buscar ..." /&amp;gt;
 &amp;lt;/div&amp;gt;
 &amp;lt;button type="submit" class="btn btn-default"&amp;gt;Buscar&amp;lt;/button&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Este formulario será enviado a través del método get. La ruta definida en el action la utilizaremos para manejar el argumento "search" y crear una redirección hacia una ruta amigable.
&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
A continuación crearemos las rutas en &lt;i&gt;&lt;b&gt;routes.php&lt;/b&gt;&lt;/i&gt; ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;Route::get('home/searchredirect', function(){
     
    /* Nuevo: si el argumento search está vacío regresar a la página anterior */
    if (empty(Input::get('search'))) return redirect()-&amp;gt;back();
    
    $search = urlencode(e(Input::get('search')));
    $route = "home/search/$search";
    return redirect($route);
});
Route::get("home/search/{search}", "HomeController@search");
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Observen como la primera ruta es la que se encuentra en el formulario de búsqueda, obtiene el argumento get "search" y crea una nueva ruta pasándole el valor del argumento, la ruta amigable está conectada al controlador HomeController y a una nueva acción llamada "search".
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Agregaremos al controlador &lt;i&gt;&lt;b&gt;HomeController&lt;/b&gt;&lt;/i&gt; la siguiente clase para trabajar con la tabla "&lt;i&gt;&lt;b&gt;comments&lt;/b&gt;&lt;/i&gt;":
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;use App\Comments;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Código de la acción "&lt;i&gt;&lt;b&gt;search&lt;/b&gt;&lt;/i&gt;" ...
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;    public function search($search){
        $search = urldecode($search);
        $comments = Comments::select()
                -&amp;gt;where('comment', 'LIKE', '%'.$search.'%')
                -&amp;gt;orderBy('id', 'desc')
                -&amp;gt;get();
        
        if (count($comments) == 0){
            return View('home.search')
            -&amp;gt;with('message', 'No hay resultados que mostrar')
            -&amp;gt;with('search', $search);
        } else{
            return View('home.search')
            -&amp;gt;with('comments', $comments)
            -&amp;gt;with('search', $search);
        }
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Como se puede ver en la acción obtenemos el valor del argumento "search" y guardamos los posibles comentarios en "$comments", la consulta de búsqueda la realizamos a través de la cláusula "LIKE". Si no se encuentran resultados se pasan dos variables a una nueva vista "&lt;i&gt;&lt;b&gt;search&lt;/b&gt;&lt;/i&gt;", la variable "message" es para mostrar un comentario de que no existen resultados y la variable "search" que guarda el valor de la búsqueda, de lo contrario, se pasan igualmente dos variables a la nueva vista, "comments" que contiene los comentarios y "search" que guarda el valor de la búsqueda.
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Finalmente crearemos la vista "&lt;i&gt;&lt;b&gt;search.blade.php&lt;/b&gt;&lt;/i&gt;" ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;@extends('layouts.home')

@section('content')
&amp;lt;h3&amp;gt;Resultado de la búsqueda: {{$search}}&amp;lt;/h3&amp;gt;
@if (isset($message))
&amp;lt;div class='bg-warning' style='padding: 20px'&amp;gt;
    {{$message}}
&amp;lt;/div&amp;gt;
@endif
&amp;lt;hr /&amp;gt;
@if (isset($comments))
&amp;lt;?php 
        $modal = 0;
        foreach($comments as $comment):
            $user = App\User::select()-&amp;gt;where('id', '=', $comment-&amp;gt;id_user)-&amp;gt;first();
        ?&amp;gt;
        &amp;lt;div class="row"&amp;gt;
            &amp;lt;div class="col-md-1"&amp;gt;
                &amp;lt;img src='{{url($user-&amp;gt;perfiles)}}' class='img-responsive' style='max-width: 60px' /&amp;gt;
                &amp;lt;strong&amp;gt;{{$user-&amp;gt;name}}&amp;lt;/strong&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class='col-md-6'&amp;gt;
               {{$comment-&amp;gt;comment}} 
               &amp;lt;br /&amp;gt;
               &amp;lt;i&amp;gt;Fecha: {{$comment-&amp;gt;date}} · Hora: {{$comment-&amp;gt;time}}&amp;lt;/i&amp;gt;
               
               
               @if(isset(Auth::user()-&amp;gt;id))
               @if($comment-&amp;gt;id_user == Auth::user()-&amp;gt;id)
               &amp;lt;hr /&amp;gt;
                &amp;lt;!-- Botón que abre la ventana modal eliminar --&amp;gt;
                &amp;lt;button type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteComment{{$modal}}"&amp;gt;
                  Eliminar
                &amp;lt;/button&amp;gt;

                &amp;lt;!-- Ventana modal para eliminar --&amp;gt;
                &amp;lt;div class="modal fade" id="deleteComment{{$modal}}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"&amp;gt;
                  &amp;lt;div class="modal-dialog" role="document"&amp;gt;
                    &amp;lt;div class="modal-content"&amp;gt;
                      &amp;lt;div class="modal-header"&amp;gt;
                        &amp;lt;button type="button" class="close" data-dismiss="modal" aria-label="Close"&amp;gt;&amp;lt;span aria-hidden="true"&amp;gt;×&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
                        &amp;lt;h4 class="modal-title" id="myModalLabel"&amp;gt;¿Realmente quieres eliminar este comentario?&amp;lt;/h4&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-body"&amp;gt;
                        &amp;lt;form method="post" action="{{url('user/deletecomment')}}"&amp;gt;
                            {{csrf_field()}}
                            &amp;lt;input type="hidden" name="id_comment" value="{{$comment-&amp;gt;id}}" /&amp;gt;
                            &amp;lt;button type="submit" class="btn btn-danger"&amp;gt;Eliminar&amp;lt;/button&amp;gt;
                        &amp;lt;/form&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-footer"&amp;gt;
                        &amp;lt;button type="button" class="btn btn-default" data-dismiss="modal"&amp;gt;Cerrar&amp;lt;/button&amp;gt;
                      &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                  &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;

                &amp;lt;!-- Botón para abrir la ventana modal de editar --&amp;gt;
                &amp;lt;button type="button" class="btn btn-primary" data-toggle="modal" data-target="#editComment{{$modal}}"&amp;gt;
                  Editar
                &amp;lt;/button&amp;gt;

                &amp;lt;!-- Ventana modal editar --&amp;gt;
                &amp;lt;div class="modal fade" id="editComment{{$modal}}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"&amp;gt;
                  &amp;lt;div class="modal-dialog" role="document"&amp;gt;
                    &amp;lt;div class="modal-content"&amp;gt;
                      &amp;lt;div class="modal-header"&amp;gt;
                        &amp;lt;button type="button" class="close" data-dismiss="modal" aria-label="Close"&amp;gt;&amp;lt;span aria-hidden="true"&amp;gt;×&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
                        &amp;lt;h4 class="modal-title" id="myModalLabel"&amp;gt;Editar comentario&amp;lt;/h4&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-body"&amp;gt;
                        &amp;lt;form method="post" action="{{url('user/editcomment')}}"&amp;gt;
                            {{csrf_field()}}
                            &amp;lt;div class="form-group"&amp;gt;
                            &amp;lt;textarea name="comment" rows="10" class="form-control"&amp;gt;{{$comment-&amp;gt;comment}}&amp;lt;/textarea&amp;gt;
                            &amp;lt;/div&amp;gt;
                            &amp;lt;input type="hidden" name="id_comment" value="{{$comment-&amp;gt;id}}" /&amp;gt;
                            &amp;lt;button type="submit" class="btn btn-primary"&amp;gt;Editar&amp;lt;/button&amp;gt;
                        &amp;lt;/form&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-footer"&amp;gt;
                        &amp;lt;button type="button" class="btn btn-default" data-dismiss="modal"&amp;gt;Cerrar&amp;lt;/button&amp;gt;
                      &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                  &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;?php $modal++ ?&amp;gt;
               @endif
               @endif
            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;hr /&amp;gt;
        &amp;lt;?php endforeach ?&amp;gt;
@endif
@stop
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Ahora prueben a realizar búsquedas.
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s1600/Laravel-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s320/Laravel-5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/12/18-tutorial-de-laravel-5-search-form.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/c4HCfwbmSkI/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-3850913286906078129</guid><pubDate>Mon, 30 Nov 2015 16:07:00 +0000</pubDate><atom:updated>2015-11-30T17:12:54.924+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laravel</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>17 - Tutorial de Laravel 5 - CRUD Update (Sistema de comentarios)</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/WWDOlXA9r7o/0.jpg" src="https://www.youtube.com/embed/WWDOlXA9r7o?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
En esta parte del &lt;b&gt;Tutorial de Laravel 5&lt;/b&gt;, continuamos con el sistema de comentarios agregando la opción de editarlos. En la vista home se han realizado algunas modificaciones para las opciones "Eliminar" y "Editar", para mejorar la accesibilidad al usuario se han integrado unas &lt;i&gt;ventanas modal&lt;/i&gt; (Bootstrap) para cada una de ellas.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
El código que interviene en este capítulo es el siguiente:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Se adaptan las opciones "Eliminar" y "Editar" para el uso de ventanas modal, el código completo de la vista "&lt;i&gt;&lt;b&gt;home&lt;/b&gt;&lt;/i&gt;" es el siguiente:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;@extends('layouts.home')

@section('content')
&amp;lt;h1&amp;gt;Bienvenid@s a la aplicación Laravel&amp;lt;/h1&amp;gt;
&amp;lt;hr /&amp;gt;
@if (Session::has('status'))
	&amp;lt;div class="bg-success" style="padding: 20px;"&amp;gt;
		{{Session::get('status')}}
	&amp;lt;/div&amp;gt;
	&amp;lt;hr /&amp;gt;
@endif
@if (Session::has('error'))
	&amp;lt;div class="bg-danger" style="padding: 20px;"&amp;gt;
		{{Session::get('error')}}
	&amp;lt;/div&amp;gt;
	&amp;lt;hr /&amp;gt;
@endif
@if (Auth::check())
	&amp;lt;form method="post" action="{{url('user/createcomment')}}"&amp;gt;
		{{csrf_field()}}
		&amp;lt;div class="form-group"&amp;gt;
			&amp;lt;div class="row"&amp;gt;
				&amp;lt;div class="col-md-1"&amp;gt;
					&amp;lt;img src="{{url(Auth::user()-&amp;gt;perfiles)}}" class='img-responsive' style='max-width: 60px' /&amp;gt;
					&amp;lt;strong&amp;gt;{{Auth::user()-&amp;gt;name}}&amp;lt;/strong&amp;gt;
				&amp;lt;/div&amp;gt;
				&amp;lt;div class="col-md-6"&amp;gt;
					&amp;lt;textarea name="comment" class="form-control"&amp;gt;&amp;lt;/textarea&amp;gt;
					&amp;lt;br /&amp;gt;
					&amp;lt;button type="submit" class="btn btn-primary"&amp;gt;Publicar&amp;lt;/button&amp;gt;
				&amp;lt;/div&amp;gt;
			&amp;lt;/div&amp;gt;
		&amp;lt;/div&amp;gt;
	&amp;lt;/form&amp;gt;
	&amp;lt;hr /&amp;gt;
        &amp;lt;?php 
        $comments = App\Comments::select()-&amp;gt;orderBy('id', 'desc')-&amp;gt;get();
        $modal = 0;
        foreach($comments as $comment):
            $user = App\User::select()-&amp;gt;where('id', '=', $comment-&amp;gt;id_user)-&amp;gt;first();
        ?&amp;gt;
        &amp;lt;div class="row"&amp;gt;
            &amp;lt;div class="col-md-1"&amp;gt;
                &amp;lt;img src='{{url($user-&amp;gt;perfiles)}}' class='img-responsive' style='max-width: 60px' /&amp;gt;
                &amp;lt;strong&amp;gt;{{$user-&amp;gt;name}}&amp;lt;/strong&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class='col-md-6'&amp;gt;
               {{$comment-&amp;gt;comment}} 
               &amp;lt;br /&amp;gt;
               &amp;lt;i&amp;gt;Fecha: {{$comment-&amp;gt;date}} · Hora: {{$comment-&amp;gt;time}}&amp;lt;/i&amp;gt;
               
               
               
               @if($comment-&amp;gt;id_user == Auth::user()-&amp;gt;id)
               &amp;lt;hr /&amp;gt;
                &amp;lt;!-- Botón que abre la ventana modal eliminar --&amp;gt;
                &amp;lt;button type="button" class="btn btn-danger" data-toggle="modal" data-target="#deleteComment{{$modal}}"&amp;gt;
                  Eliminar
                &amp;lt;/button&amp;gt;

                &amp;lt;!-- Ventana modal para eliminar --&amp;gt;
                &amp;lt;div class="modal fade" id="deleteComment{{$modal}}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"&amp;gt;
                  &amp;lt;div class="modal-dialog" role="document"&amp;gt;
                    &amp;lt;div class="modal-content"&amp;gt;
                      &amp;lt;div class="modal-header"&amp;gt;
                        &amp;lt;button type="button" class="close" data-dismiss="modal" aria-label="Close"&amp;gt;&amp;lt;span aria-hidden="true"&amp;gt;×&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
                        &amp;lt;h4 class="modal-title" id="myModalLabel"&amp;gt;¿Realmente quieres eliminar este comentario?&amp;lt;/h4&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-body"&amp;gt;
                        &amp;lt;form method="post" action="{{url('user/deletecomment')}}"&amp;gt;
                            {{csrf_field()}}
                            &amp;lt;input type="hidden" name="id_comment" value="{{$comment-&amp;gt;id}}" /&amp;gt;
                            &amp;lt;button type="submit" class="btn btn-danger"&amp;gt;Eliminar&amp;lt;/button&amp;gt;
                        &amp;lt;/form&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-footer"&amp;gt;
                        &amp;lt;button type="button" class="btn btn-default" data-dismiss="modal"&amp;gt;Cerrar&amp;lt;/button&amp;gt;
                      &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                  &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;

                &amp;lt;!-- Botón para abrir la ventana modal de editar --&amp;gt;
                &amp;lt;button type="button" class="btn btn-primary" data-toggle="modal" data-target="#editComment{{$modal}}"&amp;gt;
                  Editar
                &amp;lt;/button&amp;gt;

                &amp;lt;!-- Ventana modal editar --&amp;gt;
                &amp;lt;div class="modal fade" id="editComment{{$modal}}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"&amp;gt;
                  &amp;lt;div class="modal-dialog" role="document"&amp;gt;
                    &amp;lt;div class="modal-content"&amp;gt;
                      &amp;lt;div class="modal-header"&amp;gt;
                        &amp;lt;button type="button" class="close" data-dismiss="modal" aria-label="Close"&amp;gt;&amp;lt;span aria-hidden="true"&amp;gt;×&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;
                        &amp;lt;h4 class="modal-title" id="myModalLabel"&amp;gt;Editar comentario&amp;lt;/h4&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-body"&amp;gt;
                        &amp;lt;form method="post" action="{{url('user/editcomment')}}"&amp;gt;
                            {{csrf_field()}}
                            &amp;lt;div class="form-group"&amp;gt;
                            &amp;lt;textarea name="comment" rows="10" class="form-control"&amp;gt;{{$comment-&amp;gt;comment}}&amp;lt;/textarea&amp;gt;
                            &amp;lt;/div&amp;gt;
                            &amp;lt;input type="hidden" name="id_comment" value="{{$comment-&amp;gt;id}}" /&amp;gt;
                            &amp;lt;button type="submit" class="btn btn-primary"&amp;gt;Editar&amp;lt;/button&amp;gt;
                        &amp;lt;/form&amp;gt;
                      &amp;lt;/div&amp;gt;
                      &amp;lt;div class="modal-footer"&amp;gt;
                        &amp;lt;button type="button" class="btn btn-default" data-dismiss="modal"&amp;gt;Cerrar&amp;lt;/button&amp;gt;
                      &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                  &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;?php $modal++ ?&amp;gt;
               @endif
            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;hr /&amp;gt;
        &amp;lt;?php endforeach ?&amp;gt;
@else
	&amp;lt;hr /&amp;gt;
	&amp;lt;p class="bg-info" style="padding: 20px;"&amp;gt;Para poder publicar comentarios tienes que &amp;lt;a href="{{url('auth/login')}}"&amp;gt;iniciar sesión&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;
	&amp;lt;hr /&amp;gt;
@endif
@stop
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Como se puede ver, en el nuevo formulario para Editar se agregan un textarea (&lt;i&gt;&lt;b&gt;comment&lt;/b&gt;&lt;/i&gt;) con el contenido actual del comentario y un campo oculto (&lt;i&gt;&lt;b&gt;id_comment&lt;/b&gt;&lt;/i&gt;) con el id del comentario. A continuación creamos la acción en el controlador &lt;i&gt;&lt;b&gt;UserController&lt;/b&gt;&lt;/i&gt;, esta acción se llama &lt;i&gt;&lt;b&gt;editComment&lt;/b&gt;&lt;/i&gt; ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;    public function editComment(Request $request){
        $rules = ['id_comment' =&amp;gt; 'integer'];
        $comment = e($request-&amp;gt;comment);
        $validator = Validator::make($request-&amp;gt;all(), $rules);
        if ($validator-&amp;gt;fails()){
            return redirect('home')-&amp;gt;with('error', 'Ha ocurrido un error');
        } else{
            if (Comments::where('id', '=', $request-&amp;gt;id_comment)
                    -&amp;gt;where('id_user', '=', Auth::user()-&amp;gt;id)
                    -&amp;gt;update(['comment' =&amp;gt; $comment])){
                return redirect('home')-&amp;gt;with('status', 'Enhorabuena comentario editado correctamente');
            }else{
                return redirect('home')-&amp;gt;with('error', 'Ha ocurrido un error');
            }
        }
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Como se puede en esta acción se valida el campo oculto (&lt;i&gt;&lt;b&gt;id_comment&lt;/b&gt;&lt;/i&gt;) para aceptar sólo valores del tipo integer, si la validación falla se redirecciona a "home" con un mensaje flash de error, de lo contrario, se realiza una condición, si la actualización se ha llevado a cabo con éxito, se redirecciona con un "status", de lo contrario con un "error".
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Otra cosa importante es modificar el modelo "&lt;i&gt;&lt;b&gt;Comments&lt;/b&gt;&lt;/i&gt;" para agregar una propiedad (&lt;i&gt;&lt;b&gt;$timestamps&lt;/b&gt;&lt;/i&gt;) con valor false que permita ignorar la columna "&lt;i&gt;&lt;b&gt;update_at&lt;/b&gt;&lt;/i&gt;", ya que al hacer uso del método "update()", este incluye en la consulta esta columna por defecto. Abrir "&lt;i&gt;&lt;b&gt;Comments.php&lt;/b&gt;&lt;/i&gt;" que se encuentra en la carpeta "app" y agregar a la clase la siguiente propiedad:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;public $timestamps = false;
&lt;/pre&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Por último conectaremos esta acción a una nueva ruta en &lt;i&gt;&lt;b&gt;routes.php&lt;/b&gt;&lt;/i&gt; ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;Route::post('user/editcomment', 'UserController@editComment');
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s1600/Laravel-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s320/Laravel-5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/11/17-tutorial-de-laravel-5-crud-update.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/WWDOlXA9r7o/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-8041224731204774903</guid><pubDate>Fri, 27 Nov 2015 18:39:00 +0000</pubDate><atom:updated>2015-11-27T19:39:49.363+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laravel</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>16 - Tutorial de Laravel 5 - CRUD Delete (Sistema de comentarios)</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/LLHtgTzyRbY/0.jpg" src="https://www.youtube.com/embed/LLHtgTzyRbY?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Bienvenid@s, en este capítulo del &lt;i&gt;&lt;b&gt;Tutorial de Laravel 5&lt;/b&gt;&lt;/i&gt; continuamos con el sistema &lt;i&gt;&lt;b&gt;CRUD&lt;/b&gt;&lt;/i&gt; aplicándolo al sistema de comentarios, concretamente agregaremos la opción de eliminar en los comentarios realizados por el usuario.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Si el usuario está autenticado agregaremos un formulario con un campo oculto "&lt;i&gt;&lt;b&gt;id_comment&lt;/b&gt;&lt;/i&gt;" para que el usuario lo pueda eliminar. Esto lo haremos en la vista "home" que es la cual estamos utilizando como muro para cargar los comentarios, el código completo de la vista "&lt;i&gt;&lt;b&gt;home&lt;/b&gt;&lt;/i&gt;" es el siguiente:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;@extends('layouts.home')

@section('content')
&amp;lt;h1&amp;gt;Bienvenid@s a la aplicación Laravel&amp;lt;/h1&amp;gt;
&amp;lt;hr /&amp;gt;
@if (Session::has('status'))
 &amp;lt;div class="bg-success" style="padding: 20px;"&amp;gt;
  {{Session::get('status')}}
 &amp;lt;/div&amp;gt;
 &amp;lt;hr /&amp;gt;
@endif
@if (Session::has('error'))
 &amp;lt;div class="bg-danger" style="padding: 20px;"&amp;gt;
  {{Session::get('error')}}
 &amp;lt;/div&amp;gt;
 &amp;lt;hr /&amp;gt;
@endif
@if (Auth::check())
 &amp;lt;form method="post" action="{{url('user/createcomment')}}"&amp;gt;
  {{csrf_field()}}
  &amp;lt;div class="form-group"&amp;gt;
   &amp;lt;div class="row"&amp;gt;
    &amp;lt;div class="col-md-1"&amp;gt;
     &amp;lt;img src="{{url(Auth::user()-&amp;gt;perfiles)}}" class='img-responsive' style='max-width: 60px' /&amp;gt;
     &amp;lt;strong&amp;gt;{{Auth::user()-&amp;gt;name}}&amp;lt;/strong&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class="col-md-6"&amp;gt;
     &amp;lt;textarea name="comment" class="form-control"&amp;gt;&amp;lt;/textarea&amp;gt;
     &amp;lt;br /&amp;gt;
     &amp;lt;button type="submit" class="btn btn-primary"&amp;gt;Publicar&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
   &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
 &amp;lt;/form&amp;gt;
 &amp;lt;hr /&amp;gt;
        &amp;lt;?php 
        $comments = App\Comments::select()-&amp;gt;orderBy('id', 'desc')-&amp;gt;get();
        foreach($comments as $comment):
            $user = App\User::select()-&amp;gt;where('id', '=', $comment-&amp;gt;id_user)-&amp;gt;first();
        ?&amp;gt;
        &amp;lt;div class="row"&amp;gt;
            &amp;lt;div class="col-md-1"&amp;gt;
                &amp;lt;img src='{{url($user-&amp;gt;perfiles)}}' class='img-responsive' style='max-width: 60px' /&amp;gt;
                &amp;lt;strong&amp;gt;{{$user-&amp;gt;name}}&amp;lt;/strong&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class='col-md-6'&amp;gt;
               {{$comment-&amp;gt;comment}} 
               &amp;lt;br /&amp;gt;
               &amp;lt;i&amp;gt;Fecha: {{$comment-&amp;gt;date}} · Hora: {{$comment-&amp;gt;time}}&amp;lt;/i&amp;gt;
               @if($comment-&amp;gt;id_user == Auth::user()-&amp;gt;id)
               &amp;lt;form method="post" action="{{url('user/deletecomment')}}"&amp;gt;
                   {{csrf_field()}}
                   &amp;lt;input type="hidden" name="id_comment" value="{{$comment-&amp;gt;id}}" /&amp;gt;
                   &amp;lt;button type="submit" class="btn btn-danger"&amp;gt;Eliminar&amp;lt;/button&amp;gt;
               &amp;lt;/form&amp;gt;
               @endif
            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;hr /&amp;gt;
        &amp;lt;?php endforeach ?&amp;gt;
@else
 &amp;lt;hr /&amp;gt;
 &amp;lt;p class="bg-info" style="padding: 20px;"&amp;gt;Para poder publicar comentarios tienes que &amp;lt;a href="{{url('auth/login')}}"&amp;gt;iniciar sesión&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;
 &amp;lt;hr /&amp;gt;
@endif
@stop
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
A continuación crearemos una nueva acción en &lt;i&gt;&lt;b&gt;UserController&lt;/b&gt;&lt;/i&gt; que maneje la petición del formulario, código de la acción &lt;i&gt;&lt;b&gt;deleteComment&lt;/b&gt;&lt;/i&gt;:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;    public function deleteComment(Request $request){
        $rules = ['id_comment' =&amp;gt; 'integer'];
        $validator = Validator::make($request-&amp;gt;only('id_comment'), $rules);
        if ($validator-&amp;gt;fails()){
            return redirect('home')-&amp;gt;with('error', 'Ha ocurrido un error');
        }
        else
        {
            if(Comments::where('id', '=', $request-&amp;gt;id_comment)
                    -&amp;gt;where('id_user', '=', Auth::user()-&amp;gt;id)-&amp;gt;delete()
                    ){
                return redirect('home')-&amp;gt;with('status', 'Enhorabuena comentario eliminado con éxito');
            }
            else{
                return redirect('home')-&amp;gt;with('error', 'Ha ocurrido un error');  
            }
        }
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En esta acción validamos en input hidden "&lt;i&gt;&lt;b&gt;id_comment&lt;/b&gt;&lt;/i&gt;" para permitir sólo números enteros, si la validación falla lo redireccionamos a "home" con un mensaje flash "error" (esta es otra de las modificaciones de la vista "home"), si la validación pasa, entonces incluimos una condición, si el registro es eliminado con éxito, redireccionamos a home con un "status", de los contrarios, redireccionamos con un "error".
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
A continuación en &lt;i&gt;&lt;b&gt;routes.php&lt;/b&gt;&lt;/i&gt; asociamos la acción a la ruta indicada en el "action" del formulario:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;Route::post('user/deletecomment', 'UserController@deleteComment');
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Finalmente, prueben a publicar y eliminar comentarios con distintos usuarios.&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s1600/Laravel-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s320/Laravel-5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/11/16-tutorial-de-laravel-5-crud-delete.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/LLHtgTzyRbY/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-1121271848907947599</guid><pubDate>Thu, 26 Nov 2015 21:19:00 +0000</pubDate><atom:updated>2015-11-26T22:24:25.064+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laravel</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>15 - Tutorial de Laravel 5 - CRUD Create &amp; Read (Sistema de comentarios)</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/03v8vk7EGno/0.jpg" src="https://www.youtube.com/embed/03v8vk7EGno?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En este capítulo del &lt;b&gt;Tutorial de Laravel 5&lt;/b&gt; crearemos una nueva tabla llamada "&lt;b&gt;comments&lt;/b&gt;", sobre esta tabla veremos como realizar diferentes tipos de consultas tales como la creación, lectura, actualización y eliminación de registros.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
El ejemplo consiste en permitir a los usuarios autenticados publicar comentarios desde la página de inicio, a modo de mural y mostrar los comentarios publicados en el mismo.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Lo primero que haremos es crear la clase que nos permita realizar la migración a través de&lt;b&gt; artisan&lt;/b&gt;, para ello abriremos una consola nos dirigiremos al interior de la raiz de nuestro proyecto Laravel, donde se encuentra el archivo "artisan" y ejecutamos el siguiente comando ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;php artisan make:migration create_comments_table --create=comments
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
A continuación incluiremos una serie de columnas a la table "comments", así que nos dirigimos a la carpeta "database\migrations" y abrimos el archivo "&lt;i&gt;&lt;b&gt;xxx_create_comments_table.php&lt;/b&gt;&lt;/i&gt;", código para este archivo:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCommentsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('comments', function (Blueprint $table) {
            $table-&amp;gt;increments('id');
            $table-&amp;gt;text('comment');
            $table-&amp;gt;integer('id_user');
            $table-&amp;gt;date('date');
            $table-&amp;gt;time('time');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('comments');
    }
}

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
A continuación regresamos a la consola y realizamos la migración de la nueva tabla con el siguiente comando:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;php artisan migrate
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Ahora podéis revisar en vuestra base de datos para ver que la tabla "comments" ha sido creada con éxito.
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
A continuación crearemos una clase que nos permita conectar la tabla "comments" al driver eloquent, al igual que ocurre con la clase User, así que nos dirigimos a la carpeta "app" y creamos un nuevos archivo con el siguiente nombre &lt;i&gt;&lt;b&gt;Comments.php&lt;/b&gt;&lt;/i&gt; y con el siguiente código:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Comments extends Model
{
    protected $table = 'comments';	
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Lo siguiente es realizar una serie de modificaciones en la vista "&lt;i&gt;&lt;b&gt;home&lt;/b&gt;&lt;/i&gt;", el código completo de la vista es el siguiente:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;@extends('layouts.home')

@section('content')
&amp;lt;h1&amp;gt;Bienvenid@s a la aplicación Laravel&amp;lt;/h1&amp;gt;
&amp;lt;hr /&amp;gt;
@if (Session::has('status'))
	&amp;lt;div class="bg-success" style="padding: 20px;"&amp;gt;
		{{Session::get('status')}}
	&amp;lt;/div&amp;gt;
	&amp;lt;hr /&amp;gt;
@endif
@if (Auth::check())
	&amp;lt;form method="post" action="{{url('user/createcomment')}}"&amp;gt;
		{{csrf_field()}}
		&amp;lt;div class="form-group"&amp;gt;
			&amp;lt;div class="row"&amp;gt;
				&amp;lt;div class="col-md-1"&amp;gt;
					&amp;lt;img src="{{url(Auth::user()-&amp;gt;perfiles)}}" class='img-responsive' style='max-width: 60px' /&amp;gt;
					&amp;lt;strong&amp;gt;{{Auth::user()-&amp;gt;name}}&amp;lt;/strong&amp;gt;
				&amp;lt;/div&amp;gt;
				&amp;lt;div class="col-md-6"&amp;gt;
					&amp;lt;textarea name="comment" class="form-control"&amp;gt;&amp;lt;/textarea&amp;gt;
					&amp;lt;br /&amp;gt;
					&amp;lt;button type="submit" class="btn btn-primary"&amp;gt;Publicar&amp;lt;/button&amp;gt;
				&amp;lt;/div&amp;gt;
			&amp;lt;/div&amp;gt;
		&amp;lt;/div&amp;gt;
	&amp;lt;/form&amp;gt;
	&amp;lt;hr /&amp;gt;
        &amp;lt;?php 
        $comments = App\Comments::select()-&amp;gt;orderBy('id', 'desc')-&amp;gt;get();
        foreach($comments as $comment):
            $user = App\User::select()-&amp;gt;where('id', '=', $comment-&amp;gt;id_user)-&amp;gt;first();
        ?&amp;gt;
        &amp;lt;div class="row"&amp;gt;
            &amp;lt;div class="col-md-1"&amp;gt;
                &amp;lt;img src='{{url($user-&amp;gt;perfiles)}}' class='img-responsive' style='max-width: 60px' /&amp;gt;
                &amp;lt;strong&amp;gt;{{$user-&amp;gt;name}}&amp;lt;/strong&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class='col-md-6'&amp;gt;
               {{$comment-&amp;gt;comment}} 
               &amp;lt;br /&amp;gt;
               &amp;lt;i&amp;gt;Fecha: {{$comment-&amp;gt;date}} · Hora: {{$comment-&amp;gt;time}}&amp;lt;/i&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;hr /&amp;gt;
        &amp;lt;?php endforeach ?&amp;gt;
@else
	&amp;lt;hr /&amp;gt;
	&amp;lt;p class="bg-info" style="padding: 20px;"&amp;gt;Para poder publicar comentarios tienes que &amp;lt;a href="{{url('auth/login')}}"&amp;gt;iniciar sesión&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;
	&amp;lt;hr /&amp;gt;
@endif
@stop
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En la vista podemos ver un mensaje flash "status" que mostrará un mensaje al usuario cuando el comentario se haya publicado con éxito, luego podemos ver como se comprueba si el usuario está autenticado, si lo está se carga el formulario para publicar comentarios con cierta información de usuario como la imagen de perfil y nombre, también se muestra como se realiza la consulta de selección de comentarios. De lo contrario, es decir, si el usuario no está autenticado, se muestra un mensaje indicando al usuario que debe iniciar sesión para poder publicar comentarios.
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Lo siguiente es crear la acción &lt;i&gt;&lt;b&gt;createComment&lt;/b&gt;&lt;/i&gt; en el controlador UserController, esta acción será la encargada de insertar el registro en la tabla "comments", pero previamente agregaremos la clase "&lt;i&gt;&lt;b&gt;App\Comments&lt;/b&gt;&lt;/i&gt;" al controlador ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;use App\Comments;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Código de &lt;i&gt;&lt;b&gt;createComment&lt;/b&gt;&lt;/i&gt; ...
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;    public function createComment(Request $request){
        $comment = e($request-&amp;gt;comment);
        $date = date('Y-m-d');
        $time = date('H:m:s');
        Comments::insert([
            'comment' =&amp;gt; $comment,
            'id_user' =&amp;gt; Auth::user()-&amp;gt;id,
            'date' =&amp;gt; $date,
            'time' =&amp;gt; $time,
        ]);
        return redirect('home')-&amp;gt;with('status', 'Enhorabuena comentario publicado con éxito');
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Y agregamos la nueva ruta en &lt;i&gt;&lt;b&gt;routes.php&lt;/b&gt;&lt;/i&gt; para conectarla a la acción ...
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;Route::post('user/createcomment', 'UserController@createComment');
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Finalmente realizamos la prueba para publicar comentarios y ver como los comentarios creados son mostrados en el muro.
&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;
&lt;img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/w140-h84-p/Laravel-5.png" /&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/11/15-tutorial-de-laravel-5-crud-create.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/03v8vk7EGno/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-2573097626528739388</guid><pubDate>Wed, 25 Nov 2015 16:19:00 +0000</pubDate><atom:updated>2015-12-15T17:38:30.480+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laravel</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>Tutorial de Laravel 5 en español</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;br /&gt;
Bienvenid@s, en el siguiente tutorial podéis conocer los conceptos básicos para crear aplicaciones web con el &lt;b&gt;Framework PHP Laravel 5&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://www.youtube.com/watch?v=T7zpNF3ksis&amp;amp;list=PLjARR1053fYl98_gk2uTmzhc8Oqpo6feE" target="_blank"&gt;&lt;b&gt;Ver en Youtube&lt;/b&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;¡Tal vez te interese!&lt;/i&gt; -&amp;gt; &lt;b&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/03/tutorial-de-yii2-en-espanol.html" target="_blank"&gt;Tutorial de Yii Framework 2&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/11/1-tutorial-de-laravel-5-instalacion-con.html" target="_blank"&gt;1 - Tutorial de Laravel 5 - Instalación con Composer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/11/2-tutorial-de-laravel-5-controladores.html" target="_blank"&gt;2 - Tutorial de Laravel 5 - Controladores, rutas y vistas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/11/3-tutorial-de-laravel-5-request.html" target="_blank"&gt;3 - Tutorial de Laravel 5 - Request (Peticiones y formularios)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/11/4-tutorial-de-laravel-5-validar-rutas.html" target="_blank"&gt;4 - Tutorial de Laravel 5 - Validar rutas con Expresiones Regulares&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/11/5-tutorial-de-laravel-5-layouts-con.html" target="_blank"&gt;5 - Tutorial de Laravel 5 - Layouts con blade e integrar Bootstrap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/11/6-tutorial-de-laravel-5-validator-y.html" target="_blank"&gt;6 - Tutorial de Laravel 5 - Validator y FormRequest (Validar formularios)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/11/7-tutorial-de-laravel-5-validar-con.html" target="_blank"&gt;7 - Tutorial de Laravel 5 - Validar con Ajax JSON y mensajes flash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/11/8-tutorial-de-laravel-5-artisan-user.html" target="_blank"&gt;8 - Tutorial de Laravel 5 - Artisan migrate y User Register&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/11/9-tutorial-de-laravel-5-mail-user.html" target="_blank"&gt;9 - Tutorial de Laravel 5 - Mail User (Confirmar cuenta de usuario)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/11/10-tutorial-de-laravel-5-user-login.html" target="_blank"&gt;10 - Tutorial de Laravel 5 - User Login (Autenticar usuarios)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/11/11-tutorial-de-laravel-5-user.html" target="_blank"&gt;11 - Tutorial de Laravel 5 - User ResetsPasswords (Resetear el password)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/11/12-tutorial-de-laravel-5-auth.html" target="_blank"&gt;12 - Tutorial de Laravel 5 - Auth Middleware (Panel de Usuario)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/11/13-tutorial-de-laravel-5-upload-image.html" target="_blank"&gt;13 - Tutorial de Laravel 5 - Upload Image (Perfil de usuario)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/11/14-tutorial-de-laravel-5-update.html" target="_blank"&gt;14 - Tutorial de Laravel 5 - Update (Actualizar password de usuario)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com.es/2015/11/15-tutorial-de-laravel-5-crud-create.html" target="_blank"&gt;15 - Tutorial de Laravel 5 - CRUD Create &amp;amp; Read (Sistema de comentarios)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com.es/2015/11/16-tutorial-de-laravel-5-crud-delete.html" target="_blank"&gt;16 - Tutorial de Laravel 5 - CRUD Delete (Sistema de comentarios)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/11/17-tutorial-de-laravel-5-crud-update.html" target="_blank"&gt;17 - Tutorial de Laravel 5 - CRUD Update (Sistema de comentarios)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/12/18-tutorial-de-laravel-5-search-form.html" target="_blank"&gt;18 - Tutorial de Laravel 5 - Search Form (Formulario de búsqueda)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com.es/2015/12/19-tutorial-de-laravel-5-paginate-y.html" target="_blank"&gt;19 - Tutorial de Laravel 5 - paginate y simplePaginate (Paginación de resultados)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/12/20-tutorial-de-laravel-5-pagination.html" target="_blank"&gt;20 - Tutorial de Laravel 5 - Pagination (Paginación personalizada)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com.es/2015/12/21-tutorial-de-laravel-5-public-profile.html" target="_blank"&gt;21 - Tutorial de Laravel 5 - Public Profile (Perfil público de usuario)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com.es/2015/12/22-tutorial-de-laravel-5-download-files.html" target="_blank"&gt;22 - Tutorial de Laravel 5 - Download Files (Descargar archivos del servidor)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com/2015/12/23-tutorial-de-laravel-5-admin-panel.html" target="_blank"&gt;23 - Tutorial de Laravel 5 - Admin Panel (Panel de Administrador)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com.es/2015/12/24-tutorial-de-laravel-5-oauth2.html" target="_blank"&gt;24 - Tutorial de Laravel 5 - OAuth2 Socialite (Facebook &amp;amp; Google)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jquery-manual.blogspot.com.es/2015/12/25-tutorial-de-laravel-5-oauth2.html" target="_blank"&gt;25 - Tutorial de Laravel 5 - OAuth2 Socialite (Registrar y autenticar al usuario)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s1600/Laravel-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s320/Laravel-5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/11/tutorial-de-laravel-5-en-espanol.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s72-c/Laravel-5.png" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-808575925089354901</guid><pubDate>Wed, 25 Nov 2015 13:45:00 +0000</pubDate><atom:updated>2015-11-25T17:08:41.640+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laravel</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>14 - Tutorial de Laravel 5 - Update (Actualizar password de usuario)</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/aC1NjEf4T3I/0.jpg" src="https://www.youtube.com/embed/aC1NjEf4T3I?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
En este capítulo del &lt;i&gt;&lt;b&gt;Tutorial de Laravel 5&lt;/b&gt;&lt;/i&gt; continuamos agregando opciones al Panel de Usuario, concretamente agregaremos la opción para que el usuario pueda &lt;i&gt;&lt;b&gt;actualizar su password&lt;/b&gt;&lt;/i&gt;. Para que el usuario pueda cambiar su password le solicitaremos la condición de que introduzca su actual password.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Primero agregaremos la clase "&lt;i&gt;&lt;b&gt;Hash&lt;/b&gt;&lt;/i&gt;" al controlador UserController ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;use Hash;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Crearemos dos acciones en &lt;i&gt;&lt;b&gt;UserController&lt;/b&gt;&lt;/i&gt;, la acción password que contendrá el formulario y la acción updatePassword que procesará los datos del formulario.
&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Código de la acción &lt;i&gt;&lt;b&gt;password&lt;/b&gt;&lt;/i&gt; ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;    public function password(){
        return View('user.password');
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Código de la acción &lt;i&gt;&lt;b&gt;updatePassword&lt;/b&gt;&lt;/i&gt; ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;    public function updatePassword(Request $request){
        $rules = [
            'mypassword' =&amp;gt; 'required',
            'password' =&amp;gt; 'required|confirmed|min:6|max:18',
        ];
        
        $messages = [
            'mypassword.required' =&amp;gt; 'El campo es requerido',
            'password.required' =&amp;gt; 'El campo es requerido',
            'password.confirmed' =&amp;gt; 'Los passwords no coinciden',
            'password.min' =&amp;gt; 'El mínimo permitido son 6 caracteres',
            'password.max' =&amp;gt; 'El máximo permitido son 18 caracteres',
        ];
        
        $validator = Validator::make($request-&amp;gt;all(), $rules, $messages);
        if ($validator-&amp;gt;fails()){
            return redirect('user/password')-&amp;gt;withErrors($validator);
        }
        else{
            if (Hash::check($request-&amp;gt;mypassword, Auth::user()-&amp;gt;password)){
                $user = new User;
                $user-&amp;gt;where('email', '=', Auth::user()-&amp;gt;email)
                     -&amp;gt;update(['password' =&amp;gt; bcrypt($request-&amp;gt;password)]);
                return redirect('user')-&amp;gt;with('status', 'Password cambiado con éxito');
            }
            else
            {
                return redirect('user/password')-&amp;gt;with('message', 'Credenciales incorrectas');
            }
        }
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
La acción &lt;i&gt;&lt;b&gt;password&lt;/b&gt;&lt;/i&gt; regresa una vista llamada "&lt;i&gt;password&lt;/i&gt;". La acción &lt;i&gt;&lt;b&gt;updatePassword&lt;/b&gt;&lt;/i&gt; primero valida los atributos del formularios, si la validación falla el usuario es redireccionado nuevamente al formulario con los mensajes de error, si pasa la validación primero comprobamos si el atributo "mypassword" coincide con el actual password del usuario, de ser así, actualizamos el password del usuario y lo redireccionamos a "user" con un "status", de lo contrario, lo redireccionamos nuevamente al formulario con un mensaje flash "message" con un error indicando que sus credenciales son incorrectas.
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
A continuación crearemos las rutas en "&lt;i&gt;&lt;b&gt;routes.php&lt;/b&gt;&lt;/i&gt;" para conectar las acciones:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;Route::get('user/password', 'UserController@password');
Route::post('user/updatepassword', 'UserController@updatePassword');
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Ahora creamos la vista "&lt;i&gt;&lt;b&gt;password.blade.php&lt;/b&gt;&lt;/i&gt;" en la carpeta "&lt;i&gt;user&lt;/i&gt;", esta vista es la que regresa la acción "password", el código es el siguiente ...
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;@extends('layouts.home')
@section('content')
&amp;lt;h1&amp;gt;Cambiar mi password&amp;lt;/h1&amp;gt;
@if (Session::has('message'))
 &amp;lt;div class="text-danger"&amp;gt;
 {{Session::get('message')}}
 &amp;lt;/div&amp;gt;
@endif
&amp;lt;hr /&amp;gt;
&amp;lt;form method="post" action="{{url('user/updatepassword')}}"&amp;gt;
 {{csrf_field()}}
 &amp;lt;div class="form-group"&amp;gt;
  &amp;lt;label for="mypassword"&amp;gt;Introduce tu actual password:&amp;lt;/label&amp;gt;
  &amp;lt;input type="password" name="mypassword" class="form-control"&amp;gt;
  &amp;lt;div class="text-danger"&amp;gt;{{$errors-&amp;gt;first('mypassword')}}&amp;lt;/div&amp;gt;
 &amp;lt;/div&amp;gt;
 &amp;lt;div class="form-group"&amp;gt;
  &amp;lt;label for="password"&amp;gt;Introduce tu nuevo password:&amp;lt;/label&amp;gt;
  &amp;lt;input type="password" name="password" class="form-control"&amp;gt;
  &amp;lt;div class="text-danger"&amp;gt;{{$errors-&amp;gt;first('password')}}&amp;lt;/div&amp;gt;
 &amp;lt;/div&amp;gt;
 &amp;lt;div class="form-group"&amp;gt;
  &amp;lt;label for="mypassword"&amp;gt;Confirma tu nuevo password:&amp;lt;/label&amp;gt;
  &amp;lt;input type="password" name="password_confirmation" class="form-control"&amp;gt;
 &amp;lt;/div&amp;gt;
 &amp;lt;button type="submit" class="btn btn-primary"&amp;gt;Cambiar mi password&amp;lt;/button&amp;gt;
&amp;lt;/form&amp;gt;
@stop

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Por último agregamos la nueva la opción a la vista "&lt;i&gt;user&lt;/i&gt;" ...
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;@extends('layouts.home')
@section('content')
&amp;lt;h1&amp;gt;Bienvenid@ {{Auth::user()-&amp;gt;name}} a su Panel de Control&amp;lt;/h1&amp;gt;
@if (Session::has('status'))
&amp;lt;hr /&amp;gt;
&amp;lt;div class='text-success'&amp;gt;
    {{Session::get('status')}}
&amp;lt;/div&amp;gt;
&amp;lt;hr /&amp;gt;
@endif

&amp;lt;img src='{{url(Auth::user()-&amp;gt;perfiles)}}' class='img-responsive' style='max-width: 150px' /&amp;gt;

&amp;lt;h3&amp;gt;Opciones:&amp;lt;/h3&amp;gt;
&amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href="{{url('user/profile')}}"&amp;gt;Cambiar mi imagen de perfil&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href="{{url('user/password')}}"&amp;gt;Cambiar mi password&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;

@stop
&lt;/pre&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Ahora prueben a cambiar su password desde el Panel de Control.&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s1600/Laravel-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s320/Laravel-5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/11/14-tutorial-de-laravel-5-update.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/aC1NjEf4T3I/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-1334820861544453602</guid><pubDate>Tue, 24 Nov 2015 21:18:00 +0000</pubDate><atom:updated>2015-11-24T22:18:29.062+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laravel</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>13 - Tutorial de Laravel 5 - Upload Image (Perfil de usuario)</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/-Q4xuMEMlFM/0.jpg" src="https://www.youtube.com/embed/-Q4xuMEMlFM?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En este capítulo del &lt;i&gt;&lt;b&gt;Tutorial de Laravel 5&lt;/b&gt;&lt;/i&gt; empezamos a incluir opciones en el panel de control de usuarios, crearemos una opción que permita a los usuarios cambiar su&lt;i&gt; imagen de perfil&lt;/i&gt;.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Para esta tarea crearemos dos nuevas acciones en el controlador &lt;i&gt;&lt;b&gt;UserController&lt;/b&gt;&lt;/i&gt;, la acción &lt;i&gt;&lt;b&gt;profile&lt;/b&gt;&lt;/i&gt; será la encargada de obtener el formulario para subir la imagen y la acción &lt;i&gt;&lt;b&gt;updateProfile&lt;/b&gt;&lt;/i&gt; será la encargada de procesar los datos enviados en el formulario.&lt;/div&gt;
&lt;br /&gt;
Código de la acción &lt;i&gt;&lt;b&gt;profile&lt;/b&gt;&lt;/i&gt; ...
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;    public function profile(){
        return View('user.profile');
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Código de la acción &lt;i&gt;&lt;b&gt;updateProfile&lt;/b&gt;&lt;/i&gt; ...
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;public function updateProfile(Request $request){
        $rules = ['image' =&amp;gt; 'required|image|max:1024*1024*1',];
        $messages = [
            'image.required' =&amp;gt; 'La imagen es requerida',
            'image.image' =&amp;gt; 'Formato no permitido',
            'image.max' =&amp;gt; 'El máximo permitido es 1 MB',
        ];
        $validator = Validator::make($request-&amp;gt;all(), $rules, $messages);
        
        if ($validator-&amp;gt;fails()){
            return redirect('user/profile')-&amp;gt;withErrors($validator);
        }
        else{
            $name = str_random(30) . '-' . $request-&amp;gt;file('image')-&amp;gt;getClientOriginalName();
            $request-&amp;gt;file('image')-&amp;gt;move('perfiles', $name);
            $user = new User;
            $user-&amp;gt;where('email', '=', Auth::user()-&amp;gt;email)
                 -&amp;gt;update(['perfiles' =&amp;gt; 'perfiles/'.$name]);
            return redirect('user')-&amp;gt;with('status', 'Su imagen de perfil ha sido cambiada con éxito');
        }
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En la acción &lt;i&gt;&lt;b&gt;updateProfile&lt;/b&gt;&lt;/i&gt; se puede ver como se valida el atributo "&lt;i&gt;&lt;b&gt;image&lt;/b&gt;&lt;/i&gt;" del formulario. Si la validación falla se redirecciona a la ruta "&lt;i&gt;user/profile&lt;/i&gt;" con los errores, si es correcto se guarda la imagen en la carpeta "&lt;i&gt;perfiles&lt;/i&gt;" y se actualiza la columna "&lt;i&gt;perfiles&lt;/i&gt;" del usuario con la nueva ruta hacia la imagen subida y finalmente se redirecciona a la ruta "&lt;i&gt;user&lt;/i&gt;" con un mensaje flash (status).
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
A continuación crearemos las rutas en&lt;i&gt;&lt;b&gt; routes.php&lt;/b&gt;&lt;/i&gt; para manejar las acciones creadas anteriormente:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;Route::get('user/profile', 'UserController@profile');
Route::post('user/updateprofile', 'UserController@updateProfile');
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
También tenemos que crear la vista asociada a la acción "&lt;i&gt;profile&lt;/i&gt;", esta vista la crearemos en la carpeta "&lt;i&gt;user&lt;/i&gt;" como "&lt;i&gt;&lt;b&gt;profile.blade.php&lt;/b&gt;&lt;/i&gt;" y con el siguiente código que alberga el formulario:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;@extends('layouts.home')
@section('content')
&amp;lt;h1&amp;gt;Cambiar imagen de perfil&amp;lt;/h1&amp;gt;
&amp;lt;form method='post' action='{{url("user/updateprofile")}}' enctype='multipart/form-data'&amp;gt;
	{{csrf_field()}}
	&amp;lt;div class='form-group'&amp;gt;
		&amp;lt;label for='image'&amp;gt;Imagen: &amp;lt;/label&amp;gt;
		&amp;lt;input type="file" name="image" /&amp;gt;
		&amp;lt;div class='text-danger'&amp;gt;{{$errors-&amp;gt;first('image')}}&amp;lt;/div&amp;gt;
	&amp;lt;/div&amp;gt;
	&amp;lt;button type='submit' class='btn btn-primary'&amp;gt;Actualizar imagen de perfil&amp;lt;/button&amp;gt;
&amp;lt;/form&amp;gt;
@stop
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Otra cosa importante es modificar la vista "&lt;i&gt;user.blade.php&lt;/i&gt;" para agregar un link con la nueva opción. Código completo de la vista "user":
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;@extends('layouts.home')
@section('content')
&amp;lt;h1&amp;gt;Bienvenid@ {{Auth::user()-&amp;gt;name}} a su Panel de Control&amp;lt;/h1&amp;gt;
@if (Session::has('status'))
&amp;lt;hr /&amp;gt;
&amp;lt;div class='text-success'&amp;gt;
    {{Session::get('status')}}
&amp;lt;/div&amp;gt;
&amp;lt;hr /&amp;gt;
@endif

&amp;lt;img src='{{url(Auth::user()-&amp;gt;perfiles)}}' class='img-responsive' style='max-width: 150px' /&amp;gt;

&amp;lt;h3&amp;gt;Opciones:&amp;lt;/h3&amp;gt;
&amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href="{{url('user/profile')}}"&amp;gt;Cambiar mi imagen de perfil&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;

@stop
&lt;/pre&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Ahora puedes probar a cambiar tu imagen de perfil desde el panel de control.
&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s1600/Laravel-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s320/Laravel-5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/11/13-tutorial-de-laravel-5-upload-image.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/-Q4xuMEMlFM/default.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1805246100277841107.post-1307955565522939261</guid><pubDate>Tue, 24 Nov 2015 16:35:00 +0000</pubDate><atom:updated>2015-11-24T17:35:11.003+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">laravel</category><category domain="http://www.blogger.com/atom/ns#">PHP</category><title>12 - Tutorial de Laravel 5 - Auth Middleware (Panel de Usuario) </title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/XHeDAI0uhOw/0.jpg" src="https://www.youtube.com/embed/XHeDAI0uhOw?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En este capítulo del &lt;b&gt;Tutorial de Laravel 5&lt;/b&gt; continuamos con el sistema de usuarios y concretamente empezaremos a construir el &lt;i&gt;&lt;b&gt;Panel de Acceso para los usuarios que se han autenticado correctamente&lt;/b&gt;&lt;/i&gt;.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
La primera modificación la realizamos en los controladores &lt;i&gt;&lt;b&gt;AuthController y PasswordController&lt;/b&gt;&lt;/i&gt; para redireccionar a los usuarios una vez se han autenticado o han reseteado el password correctamente al panel de usuario que vamos a construir.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
En &lt;i&gt;&lt;b&gt;AuthController&lt;/b&gt;&lt;/i&gt; agregaremos la siguiente propiedad a la clase:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;protected $redirectPath = '/user';
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
En&lt;i&gt;&lt;b&gt; PasswordController&lt;/b&gt;&lt;/i&gt; agregaremos la siguiente propiedad a la clase:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;protected $redirectTo = '/user';
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
La ruta a la que apuntan ambas propiedades aun la tenemos que crear, primeramente crearemos un nuevo controllador llamado &lt;i&gt;&lt;b&gt;UserController.php&lt;/b&gt;&lt;/i&gt; en la carpeta "Controllers" con el siguiente código:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;?php 

namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class UserController extends Controller{
	
	public function __construct(){
		$this-&amp;gt;middleware('auth');
	}
	
	public function user(){
		return View('user.user');
	}
	
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En este controlador estamos haciendo uso de &lt;i&gt;&lt;b&gt;Middleware&lt;/b&gt;&lt;/i&gt; para permitir el acceso a las acciones del mismo sólo a los usuarios autenticados, también se puede ver la acción "user" esta acción será posteriormente conectada a la ruta "user". Ahora vamos a crear la vista &lt;i&gt;&lt;b&gt;user&lt;/b&gt;&lt;/i&gt; pero primero tenemos que crear la carpeta "user" en la carpeta "views", guardar en la nueva carpeta "&lt;i&gt;&lt;b&gt;user&lt;/b&gt;&lt;/i&gt;" la siguiente vista "&lt;i&gt;&lt;b&gt;user.blade.php&lt;/b&gt;&lt;/i&gt;" con el siguiente código:
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;@extends('layouts.home')
@section('content')
&amp;lt;h1&amp;gt;Bienvenid@ {{Auth::user()-&amp;gt;name}} a su Panel de Control&amp;lt;/h1&amp;gt;
@if (Session::has('status'))
&amp;lt;hr /&amp;gt;
&amp;lt;div class='text-success'&amp;gt;
    {{Session::get('status')}}
&amp;lt;/div&amp;gt;
&amp;lt;hr /&amp;gt;
@endif

&amp;lt;img src='{{url(Auth::user()-&amp;gt;perfiles)}}' class='img-responsive' style='max-width: 150px' /&amp;gt;

@stop
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En el &lt;a href="http://jquery-manual.blogspot.com/2015/11/11-tutorial-de-laravel-5-user.html" target="_blank"&gt;capítulo anterior&lt;/a&gt; mostrabamos el mensaje flash "&lt;i&gt;status&lt;/i&gt;" tras resetear el password en la vista "home", ahora vamos a quitar el "status" de la vista home y como podéis ver en la nueva vista se incluye ahí, ya que es ahí donde los usuarios serán redireccionados tras resetear sus passwords. Como podéis ver se muestra un simple título de bienvenida mostrando el nombre del usuario y abajo una imagen cuyo "src" es obtenido de una columna llamada "&lt;i&gt;&lt;b&gt;perfiles&lt;/b&gt;&lt;/i&gt;" esta columna la vamos a crear a continuación en la tabla "users", la columna "perfiles" es del tipo VARCHAR, longitud 255 y le asignamos un valor por defecto con la ruta hacia una imagen de perfil por defecto que asignaremos a los usuarios que se registren, por ejemplo, &lt;i&gt;&lt;b&gt;perfiles/perfil.jpg&lt;/b&gt;&lt;/i&gt;. 
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Lógicamente tenemos que crear la carpeta "&lt;i&gt;&lt;b&gt;perfiles&lt;/b&gt;&lt;/i&gt;" en la carpeta "&lt;i&gt;&lt;b&gt;public&lt;/b&gt;&lt;/i&gt;" de nuestro proyecto y agregar la imagen que queremos por defecto para los usuarios registrados, buscar en google imágenes, por ejemplo, con la palabra "perfil", en el resultado podéis encontrar muchas imágenes que pueden ser válidas para utilizarlas, la guardáis en la carpeta perfiles como &lt;i&gt;&lt;b&gt;perfil.jpg&lt;/b&gt;&lt;/i&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Otra cosa importante es modificar la dirección de un enlace del ménu en el Layout "&lt;i&gt;&lt;b&gt;home&lt;/b&gt;&lt;/i&gt;", es decir, &lt;i&gt;dónde aparece el nombre del usuario&lt;/i&gt;, incluyendo la nueva ruta "&lt;i&gt;&lt;b&gt;user&lt;/b&gt;&lt;/i&gt;".
&lt;/div&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;li&amp;gt;&amp;lt;a href="{{url('user')}}"&amp;gt;{{Auth::user()-&amp;gt;name}}&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalmente crear la ruta "&lt;i&gt;&lt;b&gt;user&lt;/b&gt;&lt;/i&gt;" en &lt;i&gt;&lt;b&gt;routes.php&lt;/b&gt;&lt;/i&gt; ...
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: php"&gt;Route::get('user', 'UserController@user');
&lt;/pre&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Ahora pueden realizar un test para ver como al iniciar sesión son redireccionados a la ruta "user" y comprobar como se muestra la imagen de perfil por defecto.
&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s1600/Laravel-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1eRyWPmLxx7IyqIDVeBd80VrG0CARJgPN55rGcYA7GondG4CKLn_OmA2T1jRXKudOSPZ3j7yyKUybX-3MtUt7-rv8xIitkfpCGcdiYhuIoIpP1AzTo9prja5Q1v6MvFhHrRFwBO_jNhE/s320/Laravel-5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://jquery-manual.blogspot.com/2015/11/12-tutorial-de-laravel-5-auth.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://img.youtube.com/vi/XHeDAI0uhOw/default.jpg" width="72"/><thr:total>0</thr:total></item></channel></rss>