Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

rubenochoa's avatar

for each / blade

The issue is that when I am using $messages at messages.blade.php:

<h1>Messages</h1>
@if (count($errors) > 0)
    @foreach($messages as $message)
    <ul class="list-group">
        <li class="list-group-item">Name: {{$message->name}}</li>
        <li class="list-group-item">Email: {{$message->email}}</li>
        <li class="list-group-item">Message: {{$message->message}}</li>
    </ul>                    
    @endforeach
  @endif
@endsection

@section('sidebar')
  @parent
  <p>This is appended to the sidebar</p>
 @endsection 

I get "Undefined variable: messages" and when I use $errors: "This page isn’t workinglocalhost is currently unable to handle this request. HTTP ERROR 500".

messagesController:

public function submit(Request $request){
        $this->validate($request, [
            'name' => 'required',
            'email' => 'required'
        ]);
        
        //create new message
        $message = new Message;
        $message->name = $request->input('name');
        $message->email = $request->input('email');
        $message->message = $request->input('message');
        //save message
        $message->save();
        //redirect
        return redirect('home')->with('success', 'Message sent');

    }
    public function getMessages(){
        $messages = Message::all();

        return view('messages')->with('messages',$messages);
    }

web.php:

Route::get('/', ['App\Http\Controllers\PagesController','getHome'])->name('home');
Route::get('/about', ['App\Http\Controllers\PagesController','getAbout'])->name('about');
Route::get('/contact', ['App\Http\Controllers\PagesController','getContact'])->name('contact');

Route::get('/messages', ['App\Http\Controllers\MessagesController',])->name('messages');

Route::post('/contact/submit', ['App\Http\Controllers\MessagesController', 'submit'])->name('submit');

pagesController:

class PagesController extends Controller
{
    public function getHome(){
        return view('home');
    }
    public function getAbout(){
        return view('about');
    }
    public function getContact(){
        return view('contact');
    }
}
0 likes
33 replies
pazitron's avatar

Try returning your view using compact with the variable. return view('messages', compact('messages');

SilenceBringer's avatar

@rubenochoa ok, step by step. Show your route you are actually call, which Controller/action it uses. Possible you have this problem in action different to getMessages?

SilenceBringer's avatar

@rubenochoa this route

Route::get('/messages', ['App\Http\Controllers\MessagesController',])->name('messages');

missed action.

Do you see this error when visit /messages? or which page you are visiting?

SilenceBringer's avatar

@rubenochoa because you missed action. add getMessages

So the question still is: what is the page you are on when you see original error?

"Undefined variable: messages"

SilenceBringer's avatar

@rubenochoa so, actually you are here

Route::get('/', ['App\Http\Controllers\PagesController','getHome'])->name('home');

in controller

public function getHome(){
        return view('home');
    }

you do not pass messages, but use it in blade (maybe in header, or somewhere ?)

rubenochoa's avatar

No, nowhere else. So you mean to use this function in pagesController:

public function getMessages){
        return view('messages');
    }

right? @silencebringer

SilenceBringer's avatar

@rubenochoa no. if you are at home page, you shouldn't see it

Try

    public function getHome(){
        dd('I am here');
        return view('home');
    }

to check you are on this page

if it works - try

    public function getHome(){
        return view('home', [
            'message' => Message::all(),
        ]);
    }

and see where in blade you use it

SilenceBringer's avatar

@rubenochoa it's joke? Just import Message model in PageController

at the top of Page Controller (near other use statements)

use App\Models\Message;

(set correct namespace of your Message model)

rubenochoa's avatar

@silencebringer ofcource not cause I am still learning laravel and i am feeling stu#@. Still undefined variable messages

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\Model;
use App\Models\Message;

use App\Http\Controllers\PagesController;
use Illuminate\Support\Facades\Route;
rubenochoa's avatar

If I understand of that you are asking the app.blade.php I have:

div class="container">
                @if(Route::is('home'))                
                    @include('inc.showcase')
                @endif
                <div class="row">                    
            <div class="col-md-8 col-md-8">
                @include('inc.messages')
                @yield('content') 
            </div>
            <div class="col-md-4 col-lg-4">
                @include('inc.sidebar')
            </div>
        </div>
        </div>
SilenceBringer's avatar
Level 55

@rubenochoa I think we near to finish! I see

@include('inc.messages')

try to comment it out and see if error is gone. If yes - this included file uses messages

1 like
rubenochoa's avatar

The world is better with people like you. Worked like a charm. Thank you for your patient, @silencebringer . The only issue is at locahost/messages can not found "Class 'App\Http\Controllers\Message' not found"

MichalOravec's avatar

The only issue is at locahost/messages can not found "Class 'App\Http\Controllers\Message' not found"

Unbelievable.

rubenochoa's avatar

What is unbelievable that the error exist or that some people like me have learning diffifulties? Or i am acting bad? @michaloravec

MichalOravec's avatar

A few minutes ago @silencebringer explained to you what the error is.

If you have to ask again, then the problem is with you...

1 like
pazitron's avatar

The get messages route is not pointing at the controller action Route::get('/messages', ['App\Http\Controllers\MessagesController',])->name('messages');

should be Route::get('/messages', ['App\Http\Controllers\MessagesController', 'getMessages'])->name('messages');

1 like
MichalOravec's avatar

ofcource not cause I am still learning laravel

5 Lessons completed.

Helping you is useless.

Please or to participate in this conversation.