Проблема с параметром маршрута 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-адресов, но столкнулся с той же проблемой.

вы уверены, что $m->id в некоторых случаях не дает вам NULL?

kris gjika 30.07.2024 14:42

Можете ли вы указать, как вы получили доступ к этому маршруту edit_mahasiswa. ?Поскольку это UrlGenerationException, существует вероятность того, чтоid не был передан должным образом при доступе к этому маршруту.

Subha 30.07.2024 14:50

когда я подключаюсь к своему контроллеру, он работает, но если я запускаю свой код, чтобы вернуть представление, отсутствует параметр

DITZ 30.07.2024 14:51

Я проверил, что $m->id передается правильно, используя dd() в методе контроллера. Вывод подтверждает, что идентификатор получен.

DITZ 30.07.2024 14:53

Несмотря на эти шаги, я по-прежнему сталкиваюсь с ошибкой UrlGenerationException, указывающей на отсутствие параметра id при попытке создать URL-адрес для маршрута edit_mahasiswa.

DITZ 30.07.2024 14:53

«с помощью dd()» — dd() не является надежным способом отладки цикла... Вы делаете foreach(), поэтому dd($m->id) покажет вам только id первого экземпляра $m. Если да ['id' => $m->id ?? 1], ваш код работает? Если да, то один или несколько экземпляров $m не имеют свойства id, а ['id' => null] недопустимо, и вам нужно обработать это.

Tim Lewis 30.07.2024 15:14

«На мой взгляд, я перечисляю сущности Махасисвы» — покажите этот код; Я предполагаю, что вы запрашиваете в своей БД записи Mahasiswa, затем передаете их этому представлению и зацикливаете их через foreach(). Не должно быть причины $m->id есть null, поскольку для записей БД нужен первичный ключ, который, как я предполагаю, равен id... Но да, здесь вам не хватает важного фрагмента кода, который нам нужно увидеть, чтобы помочь в дальнейшем.

Tim Lewis 30.07.2024 15:57
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
7
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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');`

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

спасибо за ответ, как мне обращаться со своим контроллером, чтобы он работал, извините за мой плохой английский

DITZ 30.07.2024 15:03

Вы можете просто присвоить переменной $id значение по умолчанию.

Aftab Ishfaq 30.07.2024 15:08
public function edit($id = 0) { //your code }
Aftab Ishfaq 30.07.2024 15:09

или просто присвойте ему нулевое значение по умолчанию public function edit($id = 0) { //your code }

Aftab Ishfaq 30.07.2024 15:11

спасибо, работает, использовал {id?}

DITZ 30.07.2024 17:45

Вам следует серьезно разобраться, почему $m->id является null... Если вы пытаетесь редактировать записи базы данных, все они должны иметь id, поскольку это должен быть первичный ключ. {id?} делает свойство необязательным на этом маршруте, поэтому вы можете перейти к /mahasiswa/edit или mahasiswa/edit/1, но первый маршрут не имеет смысла... Какую запись вы пытаетесь редактировать, если не передаете идентификатор? Это пластырь для решения более серьезной проблемы с вашим кодом.

Tim Lewis 30.07.2024 21:35

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

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

Другие вопросы по теме