не обновил функцию обновления Laravel

#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 /…