#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) }}"
. Кроме того, ее сложно отлаживать, просто взглянув на код. Хорошо ли это работает, если на странице есть только одна форма?