I have created a menu in master blade template in Laravel and have extended that to the other pages. That menu has a dropdown, with several options, that get fetched from the database. While, this works on the master template. It throws the same error on rest of the pages.
How should I fix this?
Here’s the error:
"ErrorException Undefined variable: types (View: /Applications/MAMP/htdocs/bootstrap/laravel-project.app/resources/views/layouts/master.blade.php)"
Here’s the web.php code:
Route::get('/master', [MenuController::class, 'show']) ->name('master.show');
Controller.php
<?php namespace AppHttpControllers; use IlluminateHttpRequest; use AppModelsDoshaType; class MenuController extends Controller { public function show(){ $types = DoshaType::all(); return view('layouts/master', compact('types')); } }
view code
<!doctype html> <html> <head> </head> <body> <div class = "container-fluid"> <div class = "row"> <div class = "col-2 mt-2"> <div class = "logo"> <img src = "./images/logo.png" id= "logo"> </div> </div> <div class = "col-10"> <nav class="navbar navbar-expand-lg navbar-dark bg-primary mt-2"> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNavDropdown"> <ul class="navbar-nav"> <li class="nav-item active"> <a class="nav-link" href="home">Home <span class="sr-only">(current)</span></a> </li> <li class="nav-item"> <a class="nav-link" href="#">A</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Y</a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> M </a> <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink"> @foreach ($types as $type) <a class="dropdown-item" href="#">{{ $type->dosha }} </a> @endforeach </div>
Advertisement
Answer
You need to create a global function
for that because every page doesn’t have $type
data. create the function in the helper file.
function types(){ $types = DoshaType::all(); return $type; }
Now in the master file call this function.
@php $types = types(); @endphp @foreach ($types as $type) <a class="dropdown-item" href="#">{{ $type->dosha }} </a> @endforeach
Another way make this query in your blade file
@php $types = AppDoshaType::all(); @endphp @foreach ($types as $type) <a class="dropdown-item" href="#">{{ $type->dosha }} </a> @endforeach