laravel

Blade y Laravel: ciclos, condicionales, token CSRF y componentes

Ya vimos cómo funcionan las vistas en Laravel y ahora sabemos que utilizan Blade.

Blade tiene muchas directivas que permiten hacer ciclos, mostrar cosas usando if o switch, generar el input para el token CSRF y muchas cosas más.

También nos permite definir componentes para más tarde usarlos en otras vistas superiores, e incluso incluir vistas en otras vistas.

Antes que nada, dejo el enlace a la documentación oficial.

Continue reading…

Organización de vistas en Laravel

Tutorial de vistas con Blade en Laravel

En este post voy a dar una introducción a cómo renderizar y mostrar vistas en el framework de Laravel. Será con la versión 5.8 pero aplica a casi todas las versiones actuales.

Lo que veremos será:

  • Cómo crear vistas
  • Ubicación de las vistas
  • Pasar datos a las vistas
  • Definir layouts o plantillas base
  • Fomentar la reutilización de plantillas

Recuerda que ya vimos:

Cómo comenzar un proyecto de Laravel

Actualizar Laravel a versión 5.8

Rutas en Laravel

Rutas en Laravel parte 2

Comencemos.

Continue reading…

Throttle en Laravel

Rutas en Laravel parte 2: prefijos, fallback, límite de tasa y formularios

Continuación de la explicación de las rutas en Laravel 5.7

Ya vimos la introducción a las rutas en Laravel, en donde exponemos las cosas más importantes y comunes. Este post es la continuación del anterior, y ahora vamos a ver:

  • Prefijos en las rutas para agruparlas
  • Ruta de fallback cuando no se encuentra alguna ruta que coincida con la petición, algo así como manejar un error 404
  • Límite de tasa para limitar las peticiones, usando el middleware de throttle
  • Generación de los verbos HTTP dentro de formularios, por ejemplo PUT, DELETE o esas cosas

Son cosas un poco más avanzadas pero nada imposible de entender.

Continue reading…

Anatomía de un mensaje de log en Laravel 5.7

Laravel: Loguear errores y mensajes a archivo de log con Monolog

Aprendiendo a loguear errores y mensajes con Laravel 5.7

Hoy vamos a ver una cosa imprescindible en toda aplicación web: el logueo de mensajes o errores dentro de un log.

Laravel, el framework más poderoso de PHP (según yo), viene con el logueo de errores configurado por defecto y permite loguear errores de cualquier tipo en pocas líneas gracias a Monolog.

Anatomía de un mensaje de log en Laravel 5.7

Anatomía de un mensaje de log en Laravel 5.7

Por cierto, si no quieres loguear con Laravel y quieres usar el lenguaje puro, mira este post: Loguear mensajes de error y debug a archivos con PHP.

Continue reading…

Solución al error No such file or directory autoload.php | Laravel

Introducción

Laravel utiliza Composer para gestionar todas sus dependencias. Si acabamos de clonar un repositorio o estamos comenzando un proyecto, puede que salga un error que dice algo así:

Warning: require(ruta\proyecto\public/../vendor/autoload.php failed to open stream: No such file or directory in ruta\proyecto.

Y abajo algo así:

Fatal error: require(): Failed opening required…

La solución es muy sencilla.

Solución

Lo que dice el error es que no encuentra el archivo autoload.php. Este archivo es generado por composer y se encarga de cargar las clases y ficheros que nuestro proyecto necesita.

Si no lo tienes, puedes instalarlo aquí: Instalar composer.

Si ya tenemos composer, sólo tenemos que navegar hasta la raíz de nuestro proyecto desde la terminal y ejecutar:

composer install

Así lo he hecho yo:

Esto empieza a descargar las dependencias y generará automáticamente el archivo autoload.php. De esta manera, el problema tendría que desaparecer.

Si sigues teniendo problemas, igual y quieras pasarte por este post para saber qué hacer después de clonar un proyecto de Laravel.

 

(429) Too Many Requests Laravel – Solución y explicación

Introducción

Cuando estamos consumiendo una api creada con Laravel, puede que nos aparezca el error que dice “(429) Too Many Requests“. Aquí explicaré por qué pasa y qué solución tenemos para ello.

Básicamente esto aparece porque estamos haciendo muchas peticiones en un corto periodo de tiempo; por ejemplo, hacer 100 peticiones en menos de un minuto.

Es una forma que tiene Laravel para protegernos. Ya que de esta forma bloqueamos el acceso a un usuario malicioso que haga miles de peticiones para que nuestro servidor caiga. Si pasa el límite, sólo se le responderá con el código http 429.

Continue reading…

Cuidado con las rutas de Laravel

Introducción

Las rutas de Laravel son una gran herramienta que nos permite construir una api rápidamente, y de forma fácil y eficaz. Simplemente tenemos que definir una ruta así:

Para después poder consumirla con una petición get a sitio.com/api/usuarios (por ejemplo). De esta manera nos evitamos parsear la ruta y muchas cosas que son laboriosas.

También podemos definir una ruta para que coincida con variables. Por ejemplo, la siguiente ruta muestra las ventas de algún año:

Podemos consumirla llamando a sitio.com/api/ventas/2017 y obtendríamos las ventas del año 2017 (en un caso teórico).

Conforme nuestras rutas crezcan, puede que olvidemos las rutas que hemos definido anteriormente y que incluso repitamos algunas de ellas.

Descripción del problema o error

Como se vio anteriormente, podemos obtener las ventas de un año con la siguiente ruta:

Y puede que después definamos una ruta para obtener las ventas canceladas, así:

Si ahora llamamos a sitio.com/api/ventas/2017 obtendremos las ventas del 2017, claro está. Y si quiero las ventas canceladas podría llamar a sitio.com/api/ventas/canceladas.

Pues aquí está el problema, ya que al llamar a sitio.com/api/ventas/canceladas Laravel pensará que estamos consultando las ventas por año, y que queremos las ventas en donde el año sea “canceladas” cosa que no tiene sentido. Lo que en realidad queremos son las ventas canceladas.

Esto podría traernos muchos errores, ya que no sabríamos por qué al llamar a sitio.com/api/ventas/canceladas no nos está devolviendo nada.

Solución

Podemos hacer dos cosas: renombrar nuestras rutas o delimitarlas con una expresión regular.

Renombrando rutas

Una solución que no me gusta mucho pero que funciona es renombrar nuestras rutas. Por ejemplo, podemos cambiar a que las ventas por año sean así:

Y ahora al llamar a ventas canceladas las rutas no se confundirán. Ya que para las ventas canceladas se llamará a sitio.com/api/ventas/canceladas y para las ventas por año se llamará a sitio.com/api/ventas/anio/2017 (agregamos anio antes de la variable).

De esta manera ya no chocarán. A mí se me hace una solución no tan práctica, pero funciona perfectamente y no tiene nada de malo.

Restringiendo rutas con expresión regular

Otra solución que me gusta más es hacer que la ruta coincida sólo si ésta coincide a su vez con una expresión regular. Es decir, podemos usar el método where de las rutas, para indicar que queremos que coincida sólo si es un número.

La ruta de las ventas por año quedaría así:

Simplemente estamos indicando que coincida sólo si la variable año es un número de 4 dígitos.

Así que al llamar a sitio.com/api/ventas/2017 obtendremos las ventas del 2017, ya que 2017 es un año de 4 dígitos.

Al llamar a sitio.com/api/ventas/canceladas la ruta no coincidirá, ya que “canceladas” no es un año, por lo que Laravel buscará otra ruta para ver si coincide antes de lanzar un error. Y como encontrará la ruta de las ventas canceladas, caerá ahí y obtendremos correctamente lo que queremos.

Usar las expresiones regulares también nos ayuda a mejorar un poco nuestra aplicación, y a delimitar datos para evitar errores.

Referencias

Aquí dejo algunos enlaces que pueden ser de ayuda para entender mejor esto

Documentación oficial de las rutas de Laravel

Expresión regular para un año de 4 dígitos

Probar expresiones regulares online

Aprende más sobre Laravel aquí.

Obtener datos de php://input en PHP usando Laravel

En ocasiones necesitamos acceder a los datos que hay en el stream php://input para leer datos raw.

Laravel proporciona un mecanismo fácil para hacer esto. Lo único que tenemos que hacer es inyectar el servicio Request en nuestro controlador.
Hay que recordar que Laravel siempre pondrá los datos de la solicitud dentro de los parámetros de nuestras funciones.

Continue reading…

Cambiar zona horaria o timezone en Laravel 5.4

Cambiar la zona horaria en nuestro servidor es de suma importancia, sobre todo si queremos trabajar con fechas. Por defecto, PHP (y los frameworks que trabajen sobre el lenguaje) viene con una zona horaria preconfigurada; zona que no siempre nos servirá. Por ejemplo, si somos de México, la fecha y hora estarán mal configuradas, y al querer trabajar con ellas, obtendremos datos que, si bien son correctos, no están ajustados para el tiempo de nuestro país o lugar de origen.

Continue reading…