Форма Laravel не обновляется и указывает, что это другая форма laravel 5.8

#php #laravel #laravel-5.8

#php #laravel #laravel-5.8

Вопрос:

Есть поток, в котором вы можете прокомментировать функции создания комментариев, работает нормально, но когда я выполняю запрос на обновление, он выдает сообщение об ошибке:

 The subject field is required.
The type field is required.
The thread field is required.
  

но это не имеет ничего общего с комментарием, а с потоком. когда я просматриваю страницу, ссылка выглядит так action="http://127.0.0.1:8000/comment/4" , а в коде она написана так action="{{ route('comment.update', $comment->id) }}"
но каким-то образом маршрут проходит другим путем к thread.update , но я не понимаю почему, потому что, когда я выполняю php artisan «route:list», он говорит, что путь такой

 |        | DELETE    | comment/{comment}       
| comment.destroy     | AppHttpControllersCommentController@destroy                         
| web          |
|        | PUT       | comment/{comment}       | comment.update      | 
AppHttpControllersCommentController@update                          | web          
|
  

итак, почему это происходит через action="{{ route('threadcomment.store', $thread->id) }}" вместо action="{{ route('comment.update', $comment->id) }}"

web.php

 Route::put('/comment/{comment}','CommentController@update')->name('comment.update');
Route::delete('/comment/{comment}','CommentController@destroy')->name('comment.destroy');

Route::post('/comment/create/{thread}','CommentController@addThreadComment')->name('threadcomment.store');
  

форма

 <div class="comment-list">
    @foreach($thread->comments as $comment)

        <h4>{{$comment->body}}</h4>
        <lead>{{$comment->user->name}}</lead>

        <div class="actions">

            {{--<a href="{{ route('thread.edit',$thread->id) }}" class="btn btn-info">Edit</a>--}}

            <!-- Modal -->
            <!-- Trigger/Open The Modal -->
            <button class="btn btn-info" id="myBtn{{$comment->id}}">Edit</button>

            <!-- The Modal -->
            <div id="myModal{{$comment->id}}" class="modal">

                <!-- Modal content -->
                <div class="modal-content">
                    <span class="close{{$comment->id}}">amp;times;</span>
                    <form action-="{{ route('comment.update', $comment->id) }}" method="post" role="form">
                        {{csrf_field()}}
                        @method('PUT')
                        <legend>Edit comment</legend>
                        <div class="form-group">
                            <input type="text" class="form-control" name="body" id="" value="{{$comment->body}}">
                        </div>
                        <input class="btn btn-info" type="submit" value="Edit">
                    </form>
                </div>

            </div>

            <script>
                const modal{{$comment->id}} = document.getElementById('myModal{{$comment->id}}');
                const btn{{$comment->id}} = document.getElementById("myBtn{{$comment->id}}");
                const span{{$comment->id}} = document.getElementsByClassName("close{{$comment->id}}")[0];
                btn{{$comment->id}}.onclick = function() {
                    modal{{$comment->id}}.style.display = "block";
                };
                span{{$comment->id}}.onclick = function() {
                    modal{{$comment->id}}.style.display = "none";
                };
                window.onclick = function(event) {
                    if (event.target == modal{{$comment->id}}) {
                        modal{{$comment->id}}.style.display = "none";
                    }
                }
            </script>


            <form action="{{ route('comment.destroy', $comment->id) }}" method="post" class="inline-it">
                {{csrf_field()}}
                {{method_field('DELETE')}}
                <input class="btn btn-danger" type="submit" value="delete">
            </form>

        </div>

    @endforeach
</div>
<div class="comment-form">
    <form action="{{ route('threadcomment.store', $thread->id) }}" method="post" role="form">
        {{csrf_field()}}
        <h4>Create Comment</h4>

        <div class="form-group">
            <input type="text" class="form-control" name="body" id="" placeholder="Input...">
        </div>

        <button type="submit" class="btn btn-primary">Comment</button>
    </form>
</div>
  

контроллер комментариев

   public function addThreadComment(Request $request, Thread $thread)
{

    $this->validate($request,[
        'body' => 'required|min:5|max:250'
    ]);

    $comment = new Comment();
    $comment->body = $request->body;
    $comment->user_id = auth()->user()->id;

    $thread->comments()->save($comment);

    return back()->withMessage('Comment Created!');

}

/**
 * Update the specified resource in storage.
 *
 * @param  IlluminateHttpRequest  $request
 * @param  AppComment  $comment
 * @return IlluminateHttpResponse
 */
public function update(Request $request, Comment $comment)
{
    $this->validate($request,[
        'body' => 'required|min:5|max:250'
    ]);

    $comment->update($request->all());

    return back()->withMessage('Updated');
}

/**
 * Remove the specified resource from storage.
 *
 * @param  AppComment  $comment
 * @return IlluminateHttpResponse
 */
public function destroy(Comment $comment)
{
    //
}
  

Комментарии:

1. Откуда вы знаете, что это происходит там? Вы получили это в addThreadComment методе?

2. Кроме того, у вас есть нежелательное - действие в вашей первой форме.

3. я сделал dd() вывод в ThreadController@update (показал его на веб-странице), который не ведет к CommenController@update

4. где нежелательный, - я не могу его найти

5. В вашем <form action-="{{ route('comment.update', $comment->id) }}" . Кроме того, ее сложно отлаживать, просто взглянув на код. Хорошо ли это работает, если на странице есть только одна форма?