Проблема с параметром маршрута Laravel: отсутствует обязательный параметр для [Route: edit_mahasiswa]

Я столкнулся с проблемой маршрутизации Laravel в моем приложении. В частности, я получаю следующую ошибку:

Internal Server Error
Illuminate\Routing\Exceptions\UrlGenerationException
Missing required parameter for [Route: edit_mahasiswa] [URI: mahasiswa/edit/{id}] [Missing parameter: id].

У меня есть маршрут для редактирования объекта Махасисва:

route::group(['middleware' => ['auth:user']], function () {
 Route::get('/mahasiswa/edit/{id}', [MahasiswaController::class, 'edit'])->name('edit_mahasiswa');
}

Это мой контроллер

public function edit($id) {
        //dd($id);
        $mahasiswa = Mahasiswa::find($id);
        if ($mahasiswa) {
            return view('mahasiswa.edit', compact('mahasiswa'));
        } else {
            Alert::error('Mahasiswa tidak ditemukan');
            return redirect()->route('daftar_mahasiswa')->with('error', 'Mahasiswa tidak ditemukan');
            
        }
    }

На мой взгляд, когда я перечисляю сущности Махасисвы, я пытаюсь создать URL-адрес для редактирования сущности:

@foreach ($mahasiswa as $m)
<tr>
    <th scope = "row">{{ $m->id }}</th>
    <td>{{ $m->nim }}</td>
    <td>{{ $m->name }}</td>
    <td>{{ $m->email }}</td>
    <td>
        <a href = "{{ route('edit_mahasiswa', ['id' => $m->id]) }}">
            <button class = "btn btn-warning">
                <i class = "ri-edit-2-fill"></i>
            </button>
        </a>
    </td>
</tr>
@endforeach

Однако я получаю сообщение об ошибке:

Missing required parameter for [Route: edit_mahasiswa] [URI: mahasiswa/edit/{id}] [Missing parameter: id].

Что я пробовал:

  1. Проверено, что маршрут правильно определен в web.php.
  2. Убедитесь, что параметр id присутствует и не имеет значения null в представлении.
  3. В метод редактирования контроллера добавлена ​​отладочная информация для проверки получения параметра.
  4. Очищены кеши маршрутов и конфигурации с помощью php artisanroute:clear, php artisan config:clear и т. д.
  5. Проверил права доступа к файлам и настройки .htaccess.
  6. Использовал функции url() и action() для генерации URL-адресов, но столкнулся с той же проблемой.

🤔 А знаете ли вы, что...
В Laravel есть множество расширений и библиотек для улучшения функциональности.


52
2

Ответы:

Решено

Проблема, вероятно, в том, что $m->id возвращается в null и передает значение null в обязательный параметр. Вы можете проверить это, просто передав null статически и передав целочисленное значение.

<a href = "{{ route('edit_mahasiswa', ['id' => null]) }}">Button</a> //for error
<a href = "{{ route('edit_mahasiswa', ['id' => 1]) }}">Button</a> // for correct results

Вы можете исправить это, убедившись, что $m->id никогда не является null, или сделать параметр необязательным с помощью {id?}.

Route::get('/mahasiswa/edit/{id?}', [MahasiswaController::class, 'edit'])-`>name('edit_mahasiswa');`

Но затем обязательно обработайте нулевой случай в своем контроллере.


Вам не нужно указывать свой идентификатор в виде массива. Просто укажите свой идентификатор вот так

<a href = "{{ route('edit_mahasiswa', $m->id) }}">