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:
- Por qué ocurre el error
- Cómo solucionarlo correctamente
- Buenas prácticas para evitarlo
- Casos comunes en Laravel 11 y 12

¿Qué significa el error “Undefined variable” en Blade?
Cuando Laravel muestra un mensaje como:
Undefined variable $usersSignifica 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
@endifEsto 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>
@endforelseEsto 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:clearEsto limpia vistas compiladas.
Buenas prácticas para evitar este error
- Mantener nombres consistentes
- Usar
compact()correctamente - Validar variables antes de usarlas
- No asumir que una variable existe
- 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.
