Search code examples
phplaravelcontrollerlaravel-bladeedit

Undefined variable: category in edit blade


I have this in my controller, but it keeps comes our below error in my edit.blade

ErrorException Undefined variable: category (View:

namespace App\Http\Controllers;

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

class CategoryController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response * */ public function __construct() {

}

public function index()
{
    $categories = category::all();
    return view('category.index', [$categories = 'category']);
}

/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create()
{
    return view('category.create');
}

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    
    $this->validate($request, [
        'name' => 'required'
    ]);

    Category::create($request->all());
  

    return redirect()->back()->with('success', 'Category Successfully Created');
}

/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function show($id)
{
    //
}

/**
 * Show the form for editing the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function edit($id)
{
    $category=category::find($id);
    return view('category.edit', [$categories = 'category']);
}

/**
 * Update the specified resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function update(Request $request, $id)
{
    $this->validate($request, [
        'name' => 'required',
    ]);
        
    $category=category::find($id);  
    $category->update();

    return redirect()->route('category.index')
                    ->with('success','Category updated successfully');
}

/**
 * Remove the specified resource from storage.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function destroy($id)
{
    //
}

}

This is my edit.blade

<input type="text" name="name"  id="name" class="form-control @error('name') is-invalid @enderror" value="{{$category->name}}" placeholder="Category Name">

Solution

  • Fix your function like this. I assume your model is in all lowercase

    public function index()
    {
        $categories = category::all();
        return view('category.index', ['categories' => $categories]);
    }
    
    public function edit($id) 
    {
        $category=category::find($id);
        return view('category.edit', ['category' => $category]); 
    }
    

    which categories string is your variable on blade file, and $categories is variable from the controller

    And this is example from your index blade file

    @foreach ($categories as $category)
        <input type="text" name="name"  id="name" class="form-control @error('name') is-invalid @enderror" value="{{ $category->name }}" placeholder="Category Name">
    @endforeach
    

    This is for edit blade file

    <input type="text" name="name"  id="name" class="form-control @error('name') is-invalid @enderror" value="{{ $category->name }}" placeholder="Category Name">