1

Im retrieving data from database into my Laravel admin panel, but it says undefined variable in my view.

index.blade.php is located in admin folder inside view folder

index.blade.php

@extends('admin.layout.admin')
@section('content')
  <h3>Admin Panel</h3>

    <table class="table">

    <tbody>

        @foreach($pools as $pool)
            <tr>
                <td>{{$pool->title}}</td>
                <td>Edit
                    |
                    Delete
                </td>
            </tr>
        @endforeach
    </tbody>
    </table>
@endsection

PoolDeisgnsController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Category;
use App\PoolDesign;

class PoolDesignController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $pools = PoolDesign::all();
        return view('admin.index', compact('pools'));
    }
}

PoolDesign.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;


class PoolDesign extends Model
{

    protected $fillable = ['title','description','area','depth','cost','image','category_id'];

    public function category(){
        $this->belongsTo(Category::class);
    }
}

It gives this error when executing

Undefined variable: pools (View: C:\xampp\htdocs\jayani_pool\resources\views\admin\index.blade.php)

Routes

Route::get('/', function () {
    return view('welcome');
});

Route::get('/index','PagesController@index');
Route::get('/projects','PagesController@index1');
Route::get('/services','PagesController@index2');
Route::get('/blog','PagesController@index3');
Route::get('/about','PagesController@index4');
Route::get('/contact','PagesController@index5');

Auth::routes();
Route::get('/login','PagesController@login');

Route::get('/home', 'HomeController@index')->name('home');

Route::group(['prefix'=>'admin','middleware'=>'auth'], function(){
    Route::get('/', function(){
        return view('admin.index');
    })->name('admin.index');

    Route::resource('pools', 'PoolDesignController');
    Route::resource('category', 'CategoriesController');
});
8
  • 1
    Have you checked if you are in the right controller? Commented Nov 27, 2018 at 12:57
  • check first if the controller that calls the view is actually your PoolDesignController. To check, try to dd($pools); before returning the view Commented Nov 27, 2018 at 13:00
  • Yes, Its PoolDesignController Commented Nov 27, 2018 at 13:01
  • @Dearwolves dd($pools); gives the same error Commented Nov 27, 2018 at 13:10
  • that's it! you're not calling the index method of your PoolDesignController Commented Nov 27, 2018 at 13:11

2 Answers 2

2

It seems that your calling this route:

Route::group(['prefix'=>'admin','middleware'=>'auth'], function(){
    Route::get('/', function(){
        return view('admin.index');
    })->name('admin.index');

on your url. which really just direct your route to the view without going to the controller.

You can try this:

Route::group(['prefix'=>'admin','middleware'=>'auth'], function(){
    Route::get('/', function(){
        $pools = App\PoolDesign::all();
        return view('admin.index',compact('pools'));
    })->name('admin.index');
Sign up to request clarification or add additional context in comments.

Comments

1

With the url you are calling (/admin) you are executing the following piece of code:

Route::get('/', function(){
        return view('admin.index');
    })->name('admin.index');

Which will try to render admin.index without setting the pools variable, thus causing the error.

If you would navigate to /admin/pools it would be called correctly (i.e. through the controller, where the right variables are being set). You should change your routes accordingly or edit this piece of code to also provide $pools.

Or you could check in your template if $pools is set with:

@if(isset($pools))
   // Some more html here
@endif

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.