Undefined variable en Blade: cómo solucionarlo en Laravel paso a paso

Undefined variable en Blade: cómo solucionarlo en Laravel paso a paso

El error “Undefined variable” en Blade es uno de los más comunes en proyectos desarrollados con Laravel. Aparece cuando una variable es llamada en una vista, pero no fue enviada correctamente desde el controlador o no está definida en el contexto actual.

En esta guía aprenderás:

💣 Descarga sistemas PHP y Laravel COMPLETOS GRATIS
Recursos premium listos para usar en proyectos reales 💻
👥 +1000 desarrolladores · 🔥 Publicaciones diarias
🔥 Unirme al canal GRATIS ahora 👥 Grupo de Facebook
⏳ Enlaces disponibles por tiempo limitado
💻 Sistemas completos 🔌 Plugins PRO ⚡ Scripts listos 🔥 Recursos exclusivos

    • Por qué ocurre el error
    • Cómo solucionarlo correctamente
    • Buenas prácticas para evitarlo
    • Casos comunes en Laravel 11 y 12
Undefined variable en Blade cómo solucionarlo en Laravel paso a paso
Undefined variable en Blade cómo solucionarlo en Laravel paso a paso

¿Qué significa el error “Undefined variable” en Blade?

Cuando Laravel muestra un mensaje como:

Undefined variable $users

Significa que en tu archivo Blade estás intentando usar una variable que no existe o no fue enviada desde el controlador.

Blade no crea variables automáticamente. Solo puede acceder a las que tú le pases.

¿Por qué ocurre este error?

Existen varias razones frecuentes que generan este problema.

No se envió la variable desde el controlador

Este es el caso más común. Si en tu vista usas:

@foreach ($users as $user)

Pero en tu controlador no enviaste $users, Laravel mostrará el error.

Ejemplo incorrecto

public function index()
{
   return view('users.index');
}

Aquí no se envió ninguna variable.

Solución

public function index()
{
   $users = User::all();
   return view('users.index', compact('users'));
}

Ahora la vista sí tendrá acceso a $users.

Error en el nombre de la variable

A veces la variable sí fue enviada, pero con otro nombre.

Ejemplo

Controlador:

return view('users.index', compact('clientes'));

Vista:

@foreach ($users as $user)

Aquí el nombre no coincide.

Solución

Mantener coherencia:

return view('users.index', compact('users'));

Variable dentro de un include o componente

Cuando usas:

@include('partials.card')

Las variables no siempre están disponibles automáticamente.

Solución

Pasar explícitamente la variable:

@include('partials.card', ['user' => $user])

Variable en layouts Blade

Si usas layouts como:

@extends('layouts.app')

Y defines variables en una sección específica, puede que no estén disponibles globalmente.

Solución

Usar @yield correctamente o compartir variables globales desde un Service Provider:

View::share('variable', $valor);

Cómo evitar el error en Laravel 11 y 12

En versiones recientes como Laravel 11 y 12, la estructura es más minimalista, por lo que debes asegurarte de pasar todas las variables explícitamente.

Usar el operador null coalescing

Una forma segura de evitar que la vista rompa es usar:

{{ $user->name ?? 'Sin nombre' }}

Esto evita que el sistema se detenga si la variable no existe.

Usar isset en Blade

Otra opción es:

@if(isset($users))
   @foreach($users as $user)
     {{ $user->name }}
   @endforeach
@endif

Esto valida antes de usar la variable.

Usar @forelse en lugar de @foreach

Más elegante y seguro:

@forelse ($users as $user)
    {{ $user->name }}
  @empty
    <p>No hay usuarios</p>
@endforelse

Esto evita errores cuando la colección está vacía.

Casos comunes que generan Undefined variable

En formularios create/edit

En un formulario edit:

<input type="text" value="{{ $user->name }}">

Si accedes a esa vista sin enviar $user, generará error.

Solución

Enviar siempre la variable:

public function edit(User $user)
{
   return view('users.edit', compact('user'));
}

En rutas mal configuradas

Si llamas una vista directamente desde una ruta:

Route::get('/users', function () {
   return view('users.index');
});

Pero la vista espera $users, fallará.

Solución

Enviar la variable desde la ruta:

Route::get('/users', function () {
   $users = App\Models\User::all();
   return view('users.index', compact('users'));
});

Diferencia entre Undefined variable y Trying to get property of non-object

Es importante distinguirlos:

  • Undefined variable → La variable no existe
  • Trying to get property of non-object → La variable existe, pero es null

Ejemplo:

{{ $user->name }}

Si $user no existe → Undefined variable
Si $user es null → Trying to get property of non-object

Solución segura:

{{ optional($user)->name }}

Cómo depurar el error correctamente

Cuando aparezca el error:

  • Revisa el nombre exacto de la variable
  • Verifica el controlador
  • Usa dd($variable) para comprobar si existe
  • Ejecuta:
php artisan view:clear
php artisan cache:clear

Esto limpia vistas compiladas.

Buenas prácticas para evitar este error

  1. Mantener nombres consistentes
  2. Usar compact() correctamente
  3. Validar variables antes de usarlas
  4. No asumir que una variable existe
  5. Usar componentes Blade correctamente

Conclusión

El error Undefined variable en Blade es simple de solucionar, pero muy común en proyectos con Laravel 11 y 12.

La clave está en asegurarte de que todas las variables usadas en la vista sean enviadas correctamente desde el controlador o ruta.

Si aplicas buenas prácticas y validaciones, evitarás que tu aplicación se rompa por este tipo de errores.

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 5 / 5. Recuento de votos: 1

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Leave a comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *