#php #laravel
#php #laravel
Вопрос:
работаю с Laravel 6 и собираюсь обновить с помощью контроллера PostController
public function update(Request $request, $id)
{
$this->validate($request, array(
'title' => 'required|max:225',
'body' => 'required'
));
$post = Post::find($id);
$post->title = $request->input('title');
$post->body = $request->input('body');
$post->save();
Session::flash('success','This post was successfully updated');
return redirect()->route('posts.show', $post->id);
}
и edit.blade.php
<div class="row">
<div class="col-md-8">
<form method="PUT" action="{{ action('PostController@update',$post->id) }}" >
{{csrf_field()}}
<label for="exampleFormControlInput1">Title</label>
<input type="text" name="title" class="form-control" id="title" value="{{$post->title}}">
<label for="exampleFormControlTextarea1">Post Body</label>
<textarea name="body" class="form-control" id="body" rows="3">{{$post->body}}</textarea>
</div>
<div class="col-sm-6">
<button type="submit" class="btn btn-success btn-block" >Save Changers</button>
</div>
</div>
</div>
</form>
но при нажатии кнопки сохранить изменения база данных не обновлялась!!! не сгенерировано никаких ошибок
Комментарии:
1. Попробуйте подделать форму laravel.com/docs/6.x/routing#form-method-spoofing . Также ваша структура html недействительна.
Ответ №1:
method="PUT"
не существует для <form>
элементов, допустимыми значениями являются get
, post
и dialog
.
Измените свой
<form method="PUT" action="{{ action('PostController@update',$post->id) }}" >
{{csrf_field()}}
Для
<form method="POST" action="{{ action('PostController@update',$post->id) }}" >
{{csrf_field()}}
@method('put')
...
Ответ №2:
Модель используется для взаимодействия с таблицей, поэтому все атрибуты, которые вам нужно сохранить в БД, вам необходимо определить в вашей модели, поскольку ваша Post-модель должна выглядеть следующим образом
namespace App;
use IlluminateDatabaseEloquentModel;
class Post extends Model
{
protected $fillable = ['title', 'body'];
}
или, если вы хотите сделать все атрибуты массово присваиваемыми, вы можете определить $guarded
свойство как пустой массив, например:
namespace App;
use IlluminateDatabaseEloquentModel;
class Post extends Model
{
protected $guarded = [];
}
Комментарии:
1. здесь это не успех
2. Проверьте с помощью дампов, правильно ли вы указали путь к контроллеру, таким образом
dd($post)
, перед сохранением, и проверьте, заполнена ли модель3. здесь та же проблема
4. Следуйте с первого шага этого руководства: appdividend.com/2019/09/12 /…