"Use of undefined constant..." error in Laravel
Stefan Bogdanescu
Founder & Senior Architect · 2026-06-29
Solving the "Use of undefined constant" Error When Passing Data in Laravel Views
Welcome to the world of Laravel development! It’s completely normal to run into confusing errors when you start connecting your backend logic (controllers) with your frontend presentation (views). The error message, "Use of undefined constant tasks - assumed 'tasks'," often signals a misunderstanding about how variables and data are scoped between your controller and Blade templates.
As a senior developer, I can tell you that this specific issue usually boils down to scope, naming conventions, or the way the data is being explicitly passed to the view. Let's break down exactly what went wrong in your setup and how to fix it using best Laravel practices.
Diagnosing the "Undefined Constant" Error
The error message indicates that somewhere in your Blade file, you are attempting to use a variable or constant named $tasks (or perhaps something derived from it) without Laravel being able to find its definition in the current scope.
In your provided code:
Controller:
public function index(){
$tasks = Task::all();
return View::make(tasks.index, compact('tasks')); // Passing $tasks into the view
}View:
@foreach($tasks as $task)
<li>{{ $task->title }}</li> <!-- Assuming $task-title was a typo for $task->title -->
@endforeachThe problem often arises not from the controller, but from how you are calling View::make(). While your attempt using compact('tasks') is correct in principle, if the view file itself or the route structure is slightly misaligned, Blade can get confused about where $tasks originates.
The Correct Approach: Passing Data to Views
The most robust and clearest way to pass data from a controller to a view is by ensuring you are correctly using the compact() function or passing an array directly. Let's refine your implementation based on standard Laravel conventions.
1. Refining the Controller Logic
Your current method in the controller is very close, but we need to ensure we are referencing the correct class and method names consistently.
If you are using a standard resource structure (e.g., Task model), the flow should be:
use Illuminate\Support\Facades\View;
use App\Models\Task; // Ensure your model is imported
class TasksController extends BaseController{
public function index(){
// 1. Retrieve the data
$tasks = Task::all();
// 2. Pass the data to the view using compact()
// This makes all variables in the array available inside the view file.
return View::make('tasks.index', compact('tasks'));
}
}The key here is that compact('tasks') bundles the $tasks variable into an associative array, making it accessible within the view scope as $tasks.
2. Ensuring Correct Blade Syntax
The second potential source of error often lies in the view file itself. Pay close attention to how you access properties on your Eloquent model. If your Task model has a title column, you must use object access notation (->) rather than the hyphen (-).
Corrected View Example:
<body>
<h1>All tasks!</h1>
@foreach($tasks as $task)
{{-- Use object property access (->) for model attributes --}}
<li>{{ $task->title }}</li>
@endforeach
</body>If you were trying to use a constant directly, like $task-title, Blade interprets this as an undefined constant, leading directly to the error you encountered. Always remember that variables must be accessed via $variable_name or object properties via $object->property.