Измените запрос PUT на запрос POST, чтобы включить обновление изображения - PullRequest
0 голосов
/ 03 марта 2020

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

Теперь я хочу включить изображения в свои сообщения, поэтому я добавил его, и оно работает для моего запроса POST о создании сообщения, но не работает для моего сообщения обновления , когда я хочу изменить изображение, так как запрос PUT не поддерживает загрузку файлов.

Так что теперь я застрял, пытаясь изменить мой метод обновления с запроса PUT, который обновляет только текст до запроса POST, который обновляет оба текст и изображение, если они есть.

Это код, который я написал до сих пор:

public function update(Request $request, Post $post)
{
    //store updated image
    if($request->hasFile('image') && $request->file('image')->isValid()){
        if($post->hasMedia('posts')) {
            $post->media()->delete();
        }
        $post->addMediaFromRequest('image')->toMediaCollection('post', 's3');
    }
    $post->update(request()->validate([
        'body' => 'required'
    ]));
    return redirect($post->path());
}

Я думаю, что обновление $ post-> не работает для запроса POST. Я просто хочу обновить текст, если дано обновление.

Использование Laravel 6.

РЕДАКТИРОВАНИЕ : Моя структура макета формы (упрощенная)

<form action="action="/posts/{post}" method="POST">
    @method('PUT')
    @csrf
    <div class="form-group row">
        <input id="body" type="text" class="form-control" name="body" value="{{ old('body', $post->body) }}">
        <input id="image" type="file" class="form-control" name="image">
        <button type="submit" class="btn btn-primary">Update Post</button>
</form>

Мои маршруты:

Route::get('/posts/{post}/edit', 'PostsController@edit')->name('posts.edit');
Route::put('/posts/{post}', 'PostsController@update');

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

Я попробовал ваш код, и он отлично работал со мной, только добавил @csrf в тег form.

<form action="/posts/{post}" method="POST" enctype="multipart/form-data">
    @csrf
    @method('PUT')
<div class="form-group row">
 <input id="body" type="text" class="form-control" name="body" value="{{ old('body', $post->body) }}">

<input id="image" type="file" class="form-control" name="image">
<button type="submit" class="btn btn-primary">Update Post</button>
</form>

As you can see i am getting the proper dump for PUT request

0 голосов
/ 03 марта 2020

измените вашу форму

`enctype="multipart/form-data`

и поставьте

@csrf
@method('PUT')

ниже вашего начала тега формы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...