Home > database >  Passing multiple variable using compact in Laravel
Passing multiple variable using compact in Laravel

Time:10-27

I have a function which return the view with multiple variable. The code is

HomeController.php

public function profilePage(){
        $data = User::all();
        $book = Library::all();
        return view('page.profile' , compact(array('data', 'book')));
}

profile.blade.php

@include('layouts.sidebar')
.
.
.
 @foreach($book as $Library)
     <tr>
        <td>{{$Library->book}}</td>
        <td>{{$Library->name}}</td>
        <td>{{$Library->author}}</td>
        <td>{{$Library->price}}</td>
    </tr>
 @endforeach

sidebar.blade.php

<div >
  <a href="{{ url ('profile' , $data -> first())}}" >{{Auth::user() -> name }}</a>
</div>

When i try to refresh the browser to see the changes. It'll show error "undefined variable $book"

Illuminate\ Foundation\ Bootstrap \ HandleExceptions: 176 handleError

on line

addLoop($currentLoopData); foreach($currentLoopData as $Library): $env->incrementLoopIndices(); $loop = $env->getLastLoop(); ?>

Before i added the module to retrieve the data from Library, the code just work fine. So is this the correct approach to pass multiple variable into view?

CodePudding user response:

Try to use this instead, and make sure you are loading the correct blade file, in your case, it's profile.blade.php inside the page folder.

public function profilePage(){
    $data = User::all();
    $book = Library::all();

    return view('page.profile', [
        'data' => $data,
        'book' => $book,
    ]);

}

CodePudding user response:

There are 4 ways for passing data to view:

1 -

 return view('page.profile' , ['book' => $book, 'data' => $data]);

2 -

return view('page.profile' , compact('book', 'data'));

3 -

return view('page.profile')
    ->with('data' => $data)
    ->with('book' => $book);

4 - Not recommended

return view('page.profile' , get_defined_vars());
  • Related