Маршрут [student.update] не определен. используя ларавель 7

я новичок в ларавеле. Я столкнулся с проблемой, когда Route [student.update] не определен. используя laravel 7. при запуске проекта laravel. то, что я пробовал до сих пор, я прикрепил ниже. я прикрепил контроллер и файл просмотра и маршрута ниже, я не знаю, в чем была проблема.

Контроллер

public function edit(Student $student)
{ 
    return view('edit')->with('student',$student);
}


public function update(Request $request, Student $student)
{
    Student::update([
        'name' => $request->name,
        'phone' => $request->phone,
        'address' => $request->address,
        'created_at' => now(),
    ]);
    return redirect()->route('student.index')->with('success', 'Student has been Updatedddd');
}

edit.blade.php

<form action = "{{ route('student.update',$student->id) }}" method = "POST">
    @csrf
  
     <div class = "row">
        
        <div class = "col-xs-12 col-sm-12 col-md-12">
            <div class = "form-group">
                <strong>Name:</strong>
                <input type = "text" name = "name" value = "{{ $student->name  }}" class = "form-control" placeholder = "Name">
            </div>
        </div>

        <div class = "col-xs-12 col-sm-12 col-md-12">
            <div class = "form-group">
                <strong>Phone:</strong>
                <input class = "form-control"  name = "phone" value = "{{ $student->phone  }}"  placeholder = "Phone"></textarea>
            </div>
        </div>

        <div class = "col-xs-12 col-sm-12 col-md-12">
            <div class = "form-group">
                <strong>Address:</strong>
                <input class = "form-control"  name = "address" value = "{{ $student->address  }}"  placeholder = "Address"></textarea>
            </div>
        </div>
        <div class = "col-xs-12 col-sm-12 col-md-12 text-center">
                <button type = "submit" class = "btn btn-primary">Submit</button>
        </div>
    </div>
   
</form>

index.blade.php

@extends('layout')
 
@section('content')
    <div class = "row">
        <div class = "col-lg-12 margin-tb">
            <div class = "pull-left">
                <h2>Laravel 7 CRUD Example from scratch - ItSolutionStuff.com</h2>
            </div>
            <div class = "pull-right">
            <a class = "btn btn-success" href = "{{ route('student.create')}}"> Create New Student</a>
            </div>
        </div>
    </div>
   
    @if ($message = Session::get('success'))
        <div class = "alert alert-success">
            <p>{{ $message }}</p>
        </div>
    @endif
  
    <table class = "table table-bordered">
        <tr>
            <th>No</th>
            <th>Name</th>
            <th>Phone</th>
            <th>Address</th>
            <th width = "280px">Action</th>

        </tr>
  
        @foreach ($students as $student)
        <tr>
            <td>{{ $student->id  }}</td>
            <td>{{ $student->name }}</td>
            <td>{{ $student->phone }}</td>
            <td>{{ $student->address }}</td>
            <td>
                <a class = "btn btn-primary" href = "{{ route('student.edit',$student->id) }}">Edit</a>
                <button type = "submit" class = "btn btn-danger">Delete</button>
            </td>
        </tr>
        @endforeach
    </table>
    {!! $students->links() !!}      
@endsection

Маршруты

Route::get('/students/{student}', 'StudentController@edit')->name('student.edit');
Route::get('/students/{student}', 'StudentController@update')->name('student.update');

Ваш маршрут должен быть опубликован вместо get

Lessmore 10.12.2020 06:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
220
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш маршрут обновления определяется как маршрут получения, в то время как ваша форма редактирования пытается отправить запрос на отправку маршрута.

В идеале маршрут обновления должен быть определен как маршрут PUT или PATCH. А если вы используете Laravel 8.x, то у вас должен быть FQCN для контроллеров

//import use statements at the top
//use Illuminate\Support\Facades\Route;
//use App\Http\Controllers\StudentController; 

Route::match(['PUT', 'PATCH'], '/students/{student}', [StudentController::class, 'update'])->name('student.update');

А затем сделайте запрос отправки PUT или PATCH из edit.blade.php.

<form action = "{{ route('student.update',$student->id) }}" method = "POST">
    @csrf
    @method('PUT') //Method spoofing
  
     <div class = "row">
        
        <div class = "col-xs-12 col-sm-12 col-md-12">
            <div class = "form-group">
                <strong>Name:</strong>
                <input type = "text" name = "name" value = "{{ $student->name  }}" class = "form-control" placeholder = "Name">
            </div>
        </div>

        <div class = "col-xs-12 col-sm-12 col-md-12">
            <div class = "form-group">
                <strong>Phone:</strong>
                <input class = "form-control"  name = "phone" value = "{{ $student->phone  }}"  placeholder = "Phone"></textarea>
            </div>
        </div>

        <div class = "col-xs-12 col-sm-12 col-md-12">
            <div class = "form-group">
                <strong>Address:</strong>
                <input class = "form-control"  name = "address" value = "{{ $student->address  }}"  placeholder = "Address"></textarea>
            </div>
        </div>
        <div class = "col-xs-12 col-sm-12 col-md-12 text-center">
                <button type = "submit" class = "btn btn-primary">Submit</button>
        </div>
    </div>
   
</form>

И измените метод контроллера

public function update(Request $request, Student $student)
{
    $student->update([
        'name' => $request->name,
        'phone' => $request->phone,
        'address' => $request->address,
        'created_at' => now(),
    ]);
    return redirect()->route('student.index')->with('success', 'Student has been Updatedddd');
}

сэр есть одно сомнение Route::match(['PUT', 'PATCH'] как это работает. Route::post мы не можем поставить

hari dran 10.12.2020 06:08

сэр, работаете, пожалуйста, скажите мне, чем отличается Route::match(['PUT', 'PATCH'] и Route::post

hari dran 10.12.2020 06:12

Первый аргумент Route::match() — это массив, который будет указывать Laravel на соответствие любому из методов в массиве, поэтому в этом случае он будет соответствовать запросу PUT или PATCH. В соответствии с соглашениями REST действие обновления должно выполняться через запрос PUT или PATCH. Следовательно, следуя соглашению, мы объявляем маршрут как совпадение, которое будет соответствовать запросам PUT и PATCH.

Donkarnash 10.12.2020 06:16

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