Задать вопрос
@alexei_2002

В чем ошибка передачи/подстановки данных при редактировании категории?

При нажатии на кнопку редактировать(у кнопок url правильный) происходит ошибка

Missing required parameter for [Route: categories.update] [URI: admin_panel/categories/{category}] [Missing parameter: category]. (View: C:\OpenServer\domains\LaravelAdminPanel\resources\views\admin\categories\edit.blade.php)

Не могу понять как передать данные из CategoriesController.php(а именно, функция edit) в edit.blade.php форму
CategoriesController.php
public function edit(Categories $categories)
    {
        return view('admin.categories.edit', ['categories' => $categories]);
    }


edit.blade.php
<form action="{{ route('categories.update', $categories->id) }}" method="POST">
                @csrf
                @method('PUT')
                <div class="card-body">
                  <div class="form-group">
                    <label for="title">Название</label>
                    <input type="text" value="{{ $categories->title }}" class="form-control" name="title" id="title" placeholder="Введите название категории" required>
                  </div>


P.S. Как ни странно в уроке на ютубе все работает
  • Вопрос задан
  • 90 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@alexei_2002 Автор вопроса
Переписал функцию по своему и заработало
public function edit(Categories $categories, $id)
    {
        $categories = new Categories;
        $categories = $categories->find($id);
        return view('admin.categories.edit', ['categories' => $categories]);
    }


P.S. Не уверен насчет правильности данного подхода
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
delphinpro
@delphinpro Куратор тега Laravel
frontend developer
Categories - это же модель, верно? Тогда почему она названа во множественном числе?
Вы редактируете категорию, а не категории
Модель - Category, таблица - categories
Роут:
Route::post('categories/{category}')->name('category.update');


И тогда заработает магия неявного биндинга, и в контроллер будет передан правльный объект.

public function edit(Category $category)
{
    return view('admin.category.edit', ['category' => $category]);
}


<form action="{{ route('category.update', $category) }}"
      method="POST"
>
Ответ написан
Комментировать
tmaslov22
@tmaslov22
Backend developer
В laravel есть соглашение об именованиях, стоит ему придерживаться. Тогда магия фреймоврка начнет работать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы