I have this error. I did this a couple of times on a different pages with different subjects , but with the same method. It always worked. But for some reason now I’m getting this error.
Undefined variable $services (View:Cxampphtdocsaccountingresourcesviewslivewireservice-table.blade.php)
Possible type $services Did you mean $errors?
Web route
//Service Controller
Route::resource('service', ServiceController::class)->middleware('auth');
Model
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class Service extends Model
{
public $table = 'service';
use HasFactory;
protected $fillable = [
'service_name',
'service_description',
'service_cost'
];
}
My controller
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppModelsService;
use IlluminateSupportFacadesDB;
class ServiceController extends Controller
{
/**
* Display a listing of the resource.
*
* @return IlluminateHttpResponse
*/
public function index()
{
$services = Service::orderBy('id', 'asc')->paginate(5);
return view('service.index', compact('services'))->with(request()->input('page'));
}
/**
* Show the form for creating a new resource.
*
* @return IlluminateHttpResponse
*/
public function create()
{
}
/**
* Store a newly created resource in storage.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
//Validate the input
$request->validate([
'service_name' => 'required',
'service_cost' => 'required',
'service_description' => 'required'
]);
Service::create($request->all());
return redirect()->route('service.index')->with('success', 'The service was created successfully');
}
/**
* Display the specified resource.
*
* @param int $id
* @return IlluminateHttpResponse
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return IlluminateHttpResponse
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param IlluminateHttpRequest $request
* @param int $id
* @return IlluminateHttpResponse
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return IlluminateHttpResponse
*/
public function destroy($id)
{
//
}
}
Livewire table
<div>
<table class="table table-borderless">
<thead>
<tr>
<th style="width: 5%">Id</th>
<th style="width: 25%">Service Name</th>
<th style="width: 20%">Service Cost</th>
<th style="width: 25%">Service Description</th>
<th style="width: 10%">EDIT/DELETE</th>
</tr>
</thead>
<tbody>
@foreach($services as $service)
<tr>
<td class="table_row_middle">{{$service->id}}</td>
<td class="table_row_middle">{{$service->service_name}}</td>
<td class="table_row_middle">{{$service->service_cost}}</td>
<td class="table_row_middle">{{$service->service_description}}</td>
<td>
<form action="{{route('service.destroy', $service->id)}}" method="post">
@csrf
@method('DELETE')
<div class="flex float-right">
<a class="btn btn-primary" style="margin-right: 10px;" href="{{route('service.edit', $service->id)}}">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-pencil-square" viewBox="0 0 16 16">
<path d="M15.502 1.94a.5.5 0 0 1 0 .706L14.459 3.69l-2-2L13.502.646a.5.5 0 0 1 .707 0l1.293 1.293zm-1.75 2.456l-2-2L4.939 9.21a.5.5 0 0 0-.121.196l-.805 2.414a.25.25 0 0 0 .316.316l2.414-.805a.5.5 0 0 0 .196-.12l6.813-6.814z"/>
<path fill-rule="evenodd" d="M1 13.5A1.5 1.5 0 0 0 2.5 15h11a1.5 1.5 0 0 0 1.5-1.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 1-.5.5h-11a.5.5 0 0 1-.5-.5v-11a.5.5 0 0 1 .5-.5H9a.5.5 0 0 0 0-1H2.5A1.5 1.5 0 0 0 1 2.5v11z"/>
</svg>
</a>
<button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#delete_service">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-file-earmark-x" viewBox="0 0 16 16">
<path d="M6.854 7.146a.5.5 0 1 0-.708.708L7.293 9l-1.147 1.146a.5.5 0 0 0 .708.708L8 9.707l1.146 1.147a.5.5 0 0 0 .708-.708L8.707 9l1.147-1.146a.5.5 0 0 0-.708-.708L8 8.293 6.854 7.146z"/>
<path d="M14 14V4.5L9.5 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2zM9.5 3A1.5 1.5 0 0 0 11 4.5h2V14a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.5v2z"/>
</svg>
</button>
<div class="modal" tabindex="-1" id="delete_service">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Delete the service</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<p>Do you want to delete: {{$service->service_name}}</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<button type="submit" class="btn btn-danger flex " data-bs-toggle="modal" data-bs-target="#delete_service">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-file-earmark-x" viewBox="0 0 16 16">
<path d="M6.854 7.146a.5.5 0 1 0-.708.708L7.293 9l-1.147 1.146a.5.5 0 0 0 .708.708L8 9.707l1.146 1.147a.5.5 0 0 0 .708-.708L8.707 9l1.147-1.146a.5.5 0 0 0-.708-.708L8 8.293 6.854 7.146z"/>
<path d="M14 14V4.5L9.5 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2zM9.5 3A1.5 1.5 0 0 0 11 4.5h2V14a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.5v2z"/>
</svg>
Delete
</button>
</div>
</div>
</div>
</div>
</div>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
<div class="col-md-12 p-2">
{!! $services->links() !!}
</div>
</div>
And here is the view
<x-app-layout>
<x-slot name="header">
<h2 class="font-semibold text-xl text-gray-800 leading-tight">
{{ __('Services') }}
</h2>
</x-slot>
<div class="container mt-5 p-1" style="max-width: 1280px;">
<div class="row">
<div class="col-sm-3 mb-5">
<div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
<div class="p-6 bg-white border-b border-gray-200">
@if($errors->any())
<div class="alert alert-danger" style="margin:1rem;">
<ul>
@foreach($errors->all() as $error)
<li>
{{$error}}
</li>
@endforeach
</ul>
</div>
@endif
@if($message = Session::get('success'))
<div class="alert alert-success" style="margin:1rem;">
<p>{{$message}}</p>
</div>
@endif
<!--Add new Client-->
<form action="{{route('service.store')}}" method="post">
@csrf
<div class="col-md-12 p-1">
<label for="serviceName" class="form-label">Service</label>
<input type="text" class="form-control" id="serviceName" name="service_name">
</div>
<div class="col-md-12 p-1">
<label for="serviceCost" class="form-label">Service Cost (EUR/HOUR)</label>
<input type="text" class="form-control" id="serviceCost" name="service_cost">
</div>
<div class="col-md-12 p-1">
<label for="serviceDescription" class="form-label">Service Description</label>
<textarea type="text" rows="3" class="form-control" id="serviceDescription" name="service_description"></textarea>
</div>
<div class="col-md-12 p-1">
<button type="submit" class="btn btn-primary">Add New Service</button>
</div>
</form>
</div>
</div>
</div>
<div class="col-sm-9">
<div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
<div class="p-6 bg-white border-b border-gray-200">
<livewire:service-table/>
</div>
</div>
</div>
</div>
</div>
</x-app-layout>
Advertisement
Answer
You are sending data to the wrong view. You are sending data to service.index
view but trying to get it in livewireservice-table
so change the view like below then you can get it.
as the error explains it
Undefined variable $services (View:Cxampphtdocsaccountingresourcesviewslivewireservice-table.blade.php)
the problem is here return view('service.index', compact('services'))->with(request()->input('page'));
Try this
public function index()
{
$services = Service::orderBy('id', 'asc')->paginate(5);
return view('livewire.service-table', compact('services'))->with(request()->input('page'));
}