Во-первых, я проверил другую тему вопроса, но не смог найти решение.
когда я пытаюсь опубликовать свою форму. Я получаю эту ошибку.
The POST method is not supported for this route. Supported methods: GET, HEAD.
Форма:
<div class = "card-body">
<form action = "{{route('profile.update', ['id' => $id])}}" method = "post">
@csrf
@put
<div class = "form-group">
<label for = "location">Location</label>
<input class = "form-control" type = "text" name = "location" value = "{{$info->location}}">
</div>
<div class = "form-group">
<label for = "about">About</label>
<textarea name = "about" id = "about" rows = "10" cols = "50" class = "form-control">{{$info->about}}</textarea>
</div>
<div class = "form-control">
<p class = "text-center">
<button class = "btn btn-primary btn-md" type = "submit">Update Your Info</button>
</p>
</div>
</form>
</div>
Маршруты:
Route::group(["middleware" => "auth"], function(){
route::get("/profile/edit", [
"uses" => "ProfilesController@edit",
"as" => "profile.edit"
]);
route::get("/profile/{slug}", [
"uses" => "ProfilesController@index",
"as" => "profile"
]);
route::put("/profile/update/{id}", [
"uses" => "ProfilesController@update",
"as" => "profile.update"
]);
});
в контроллере:
public function update(Request $request, $id)
{
dd($request->all());
}
Что касается соглашений REST, глагол put
http должен использоваться при обновлении ресурса.
@parabellum ты пытаешься обновить существующий ресурс?
@parabellum я обновил свой awnser
@AdityaThakur Я пытаюсь обновить таблицу профилей в БД
@parabellum проверь мой ответ
Поскольку вы сделали форму для запроса PUT
, вам нужно изменить
route::post("/profile/update/profile", [
"uses" => "ProfilesController@update",
"as" => "profile.update"
]);
к этому
route::put("/profile/update/profile", [
"uses" => "ProfilesController@update",
"as" => "profile.update"
]);
спасибо, но если бы это было так просто решить, я бы не задавал вопрос :) никакого эффекта...
хорошо, проверьте мой другой ответ, это проще :)
Вот исправление в приведенном вами примере.
В форме route('profile.update', ['id' => {here you have to place id of record which you want to update}])
.
Посмотреть файл $info->id])}}" method="post">
<div class = "form-group">
<label for = "location">Location</label>
<input class = "form-control" type = "text" name = "location" value = "{{$info->location}}">
</div>
<div class = "form-group">
<label for = "about">About</label>
<textarea name = "about" id = "about" rows = "10" cols = "50" class = "form-control">{{$info->about}}</textarea>
</div>
<div class = "form-control">
<p class = "text-center">
<button class = "btn btn-primary btn-md" type = "submit">Update Your Info</button>
</p>
</div>
</form>
</div>
В пути
Route::group(["middleware" => "auth"], function(){
route::get("/profile/{slug}", [
"uses" => "ProfilesController@index",
"as" => "profile"
]);
route::get("/profile/edit/profile", [
"uses" => "ProfilesController@edit",
"as" => "profile.edit"
]);
route::post("/profile/update/profile/{id}", [
"uses" => "ProfilesController@update",
"as" => "profile.update"
]);
});
В контроллере
public function update(Request $request, $id)
{
dd($id, $request->all());
}
вы удалили method_field('PUT')
из формы. это будет работать, только если вы добавите метод
обновил вопрос с ошибкой POST не ставится и коды тоже
Я поместил ввод скрытым внизу формы и попытался с этим, но все равно с той же ошибкой.
@parabellum проверь сейчас. Я обновил ваш код с исправлениями.
Из вашего вопроса я могу понять, что вы пытаетесь обновить профиль, используя метод POST или, возможно, метод PUT ранее. Поскольку ресурс, который вы редактируете, уникален, вы не передаете контроллеру никаких параметров, чтобы найти этот единственный ресурс и обновить его.
поэтому измените свой маршрут, например
route::put("/profile/update/{id}", [
"uses" => "ProfilesController@update",
"as" => "profile.update"
]);
И твоя форма нравится
<form action = "{{route('profile.update', ['id' => $id])}}" method = "post">
@csrf
@method('put')
Вам нужно будет передать идентификатор профиля, который вы хотите обновить, в качестве параметра.
потом на диспетчере
public function update(Request $request, $id){
//edit the profile with id = $id
}
Я пробовал, но он говорит следующее: Undefined variable: id (View: /var/www/realestate/resources/views/profiles/edit.blade.php)
также я добавил в контроллер вопросов внизу
@parabellum Это потому, что $id
я ввел просто фиктивный идентификатор, вам нужно будет передать идентификатор профиля, который вы редактируете, вы правильно получаете данные профиля в своем представлении, в вашем случае идентификатор должен быть чем-то вроде $info->id
,
о, извините, это была моя ошибка, я ее исправил. но он все еще дает ошибку этого метода
можете ли вы прокомментировать метод с помощью route::get("/profile/{slug}")
, а затем проверить
почему, если я закомментирую этот маршрут, я не могу получить доступ к странице?
не беспокойтесь об этом, это для отладки
@parabellum также замените @put
на @method('put')
У вас ошибка в определении формы
<form class = "{{route('profile.update', ['id' => $id])}}" method = "post">
должно быть
<form action = "{{route('profile.update', ['id' => $id])}}" method = "post">
вау, большой синтаксис.. хорошо, он не работает.. ошибка The POST method is not supported for this route. Supported methods: PUT.
@parabellum поменяй @put
на @method('put')
, мой плохой
@AdityaThakur да, это изменение решило проблему. Спасибо.
поскольку вы не используете ресурсный маршрут, поэтому вы должны удалить это
{{ method_field('PUT') }}
из своей формы.