Отправка формы с помощью Laravel - PullRequest
0 голосов
/ 02 июня 2018

Я создаю страницу редактирования для своих сообщений.Я бы предпочел создать HTML-форму вместо использования FORM ::, чтобы я мог действительно учиться.У меня возникла проблема, когда я пытаюсь передать данные правильному методу контроллера.

Учебное пособие, которое я использую, говорит об использовании

{!! Form::open(['action' => ['PostsController@update', $post->id], 'method' => 'POST'])!!}

Используя свои ограниченные знания, я попытался воссоздать этокак

<form action="{!! Route::post('/posts', ['PostsController@update', $post->id]) !!}" method="POST">

под обоими я использую <input name="_method" type="hidden" value="PUT">

Я получаю ошибку `"

Объект класса Illuminate \ Routing \ Route не можетпреобразовать в строку (Просмотр: /Users/Chris/code/chris/resources/views/posts/edit.blade.php)

В моем файле web.php есть Route::resource('posts', 'PostsController');, который работал длявсе остальное до сих пор. В моем контроллере мой метод обновления имеет

public function update(Request $request, $id)
{
     $this->validate($request, [
        'title' => 'required',
        'body' => 'required'
    ]);
    // Create Post
    $post = Post::find($id);
    $post->title = $request->input('title');
    $post->body = $request->input('body');
    $post->save();

    return redirect('/')->with('success', 'Post Updated');
}

Каким будет правильное действие для отправки обновления для моей информации?

Заранее большое спасибо!

Ответы [ 3 ]

0 голосов
/ 02 июня 2018

Как указал Лагбокс в комментариях:

Route::post('/posts', ['PostsController@update', $post->id]) 

Предназначен для определения маршрута в вашем файле маршрутов.Чтобы получить URL, вы можете сделать одно из следующих действий:

Жесткий код URI

action="/posts/{{ $post->id }}"

Используйте url() помощник

action="{{ url("posts/$post->id") }}" или action="{{ url("post", $post->id) }}"

Используйте route() помощник (Это будет работать, только если вы дали маршруту название)

action="{{ route('the-route-name', $post->id) }}"

Используйте помощник действий

action="{{ action('PostsController@update', $post->id) }}"

Вот ссылка различным помощникам URL.Мой главный совет здесь - в основном придерживаться только одного из них для проекта.


Более того, ваш код должен работать абсолютно нормально, как сейчас, но обычно с REST (или способомLaravel использует rest) вы бы сделали запрос на обновление PUT или PATCH вместо запроса POST.Однако стандартные html-формы поддерживают только GET и POST, поэтому Laravel предоставляет вам способ подделать метод формы :

<input type="hidden" name="_method" value="PUT" />
0 голосов
/ 02 июня 2018

Спасибо большое Lagbox.Я использовал

<form action=" {!! route('route-name',$post->id) !!}" method="POST">

, и он работал отлично!

0 голосов
/ 02 июня 2018

замените действие формы следующим: существует множество решений:

1 - с помощью метода действия:

 <form action=" {!! action('PostsController@update',$post->id) !!}" method="POST">

2 - путем присвоения имени маршруту

<form action=" {!! route('route-name',$post->id) !!}" method="POST">

3 - с использованием метода URL

<form action=" {!! url('/posts',$post->id) !!}" method="POST">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...