试图保存评论,但应用程序将我重定向到一个空白页面
Trying to Save Comments but the application redirects me to an empty page
我已经创建了一个博客,现在我正在尝试实现一个评论部分。我想要这样当用户尝试 post 时,它会保存评论并将用户重定向到同一页面。但是当我写评论并尝试 post 它时,应用程序将我重定向到另一个页面。正在学习如何用laravel做博客,不知道什么时候用url,什么时候用路由。这是我编写的代码。
@auth
<div class="card ml-5 col-lg-8">
<ul class="list-group list-group-horizontal">
<h5 class="list-group-item active">
Comments
<h5>
<div class="card-body">
<form method="post" action="{{url('save-comment/'.Str::slug($blog->title).'/'.$blog->id)}}">
@csrf
<textarea name="comment" class="form-control py-5"></textarea>
<input type="submit" class="btn btn-primary mt-3">
</div>
</ul>
</div>
@endauth
<div class="card ml-5 col-lg-8">
<h5 class="card-header mb-4">Comments<span class="badge badge-info ml-2"> {{count($blog->comments)}}</span></h5>
<div class="card-body mt-3">
@if($blog->comments)
@foreach($blog->comments as $comment)
<blockquote class="blockquote">
<p class="mb-0">{{$comment->comment}}</p>
<footer class="blockquote-footer">Username</footer>
</blockquote>
<hr>
@endforeach
@endif
</div>
</div>
博客控制器:
function save_comment(Request $request,$slug,$id)
{
$request->validate([
'comment'=>'required',
]);
$data = new Comment;
$data->user_id=$request->user()->id;
$data->post_id=$id;
$data->comment=$request->comment;
$data->save();
return back();
}
路线:
Route::get('/blog/', [App\Http\Controllers\BlogController::class, 'index'])->name('blog');
Route::get('blogs/{slug}','App\Http\Controllers\BlogController@getArticles')->name('article.show');
Route::get('blog.update/{id}','App\Http\Controllers\BlogController@edit');
Route::put('blog.update/{id}','App\Http\Controllers\BlogController@update');
Route::post('save_comment/{slug}/{id}','App\Http\Controllers\BlogController@save_comment')->name('save_comment');
Route::get('/admin/blog', 'App\Http\Controllers\BlogController@getBlog')->name('admin.blog');
如果有人愿意协助想出解决这个问题的方法,请帮助我。我认为问题出在我写 url 的地方。当我将 url 更改为路线时,它给我一个路线未定义的错误。
Route::resource('/blog','App\Http\Controllers\BlogController');
请像这样更改您的代码并检查...
action="{{route('save_comment', $blog->id])}}"
Route::post('save_comment/{id}','App\Http\Controllers\BlogController@save_comment')->name('save_comment');
**BlogController**
function save_comment($id, Request $request)
{
$request->validate([
'comment'=>'required',
]);
$data = new Comment;
$data->user_id=$request->user()->id;
$data->post_id=$id;
$data->comment=$request->comment;
$data->save();
return back();
}
它将您重定向到一个空白页面,因为您在 url 路线上犯了错误。在您的 web.php
文件中,您的路线是:
Route::post('save_comment/{slug}/{id}', 'App\Http\Controllers\BlogController@save_comment')->name('save_comment');
虽然在您的表单中您写了 save-comment/
:
<form method="post" action="{{url('save-comment/'.Str::slug($blog->title).'/'. $blog->id)}}">
错误是因为这个。因此,我建议您像这样修改表单中的操作 save_comment/
:
<form method="post" action="{{url('save_comment/'.Str::slug($blog->title).'/'. $blog->id)}}">
这应该是固定的!
我已经创建了一个博客,现在我正在尝试实现一个评论部分。我想要这样当用户尝试 post 时,它会保存评论并将用户重定向到同一页面。但是当我写评论并尝试 post 它时,应用程序将我重定向到另一个页面。正在学习如何用laravel做博客,不知道什么时候用url,什么时候用路由。这是我编写的代码。
@auth
<div class="card ml-5 col-lg-8">
<ul class="list-group list-group-horizontal">
<h5 class="list-group-item active">
Comments
<h5>
<div class="card-body">
<form method="post" action="{{url('save-comment/'.Str::slug($blog->title).'/'.$blog->id)}}">
@csrf
<textarea name="comment" class="form-control py-5"></textarea>
<input type="submit" class="btn btn-primary mt-3">
</div>
</ul>
</div>
@endauth
<div class="card ml-5 col-lg-8">
<h5 class="card-header mb-4">Comments<span class="badge badge-info ml-2"> {{count($blog->comments)}}</span></h5>
<div class="card-body mt-3">
@if($blog->comments)
@foreach($blog->comments as $comment)
<blockquote class="blockquote">
<p class="mb-0">{{$comment->comment}}</p>
<footer class="blockquote-footer">Username</footer>
</blockquote>
<hr>
@endforeach
@endif
</div>
</div>
博客控制器:
function save_comment(Request $request,$slug,$id)
{
$request->validate([
'comment'=>'required',
]);
$data = new Comment;
$data->user_id=$request->user()->id;
$data->post_id=$id;
$data->comment=$request->comment;
$data->save();
return back();
}
路线:
Route::get('/blog/', [App\Http\Controllers\BlogController::class, 'index'])->name('blog');
Route::get('blogs/{slug}','App\Http\Controllers\BlogController@getArticles')->name('article.show');
Route::get('blog.update/{id}','App\Http\Controllers\BlogController@edit');
Route::put('blog.update/{id}','App\Http\Controllers\BlogController@update');
Route::post('save_comment/{slug}/{id}','App\Http\Controllers\BlogController@save_comment')->name('save_comment');
Route::get('/admin/blog', 'App\Http\Controllers\BlogController@getBlog')->name('admin.blog');
如果有人愿意协助想出解决这个问题的方法,请帮助我。我认为问题出在我写 url 的地方。当我将 url 更改为路线时,它给我一个路线未定义的错误。
Route::resource('/blog','App\Http\Controllers\BlogController');
请像这样更改您的代码并检查...
action="{{route('save_comment', $blog->id])}}"
Route::post('save_comment/{id}','App\Http\Controllers\BlogController@save_comment')->name('save_comment');
**BlogController**
function save_comment($id, Request $request)
{
$request->validate([
'comment'=>'required',
]);
$data = new Comment;
$data->user_id=$request->user()->id;
$data->post_id=$id;
$data->comment=$request->comment;
$data->save();
return back();
}
它将您重定向到一个空白页面,因为您在 url 路线上犯了错误。在您的 web.php
文件中,您的路线是:
Route::post('save_comment/{slug}/{id}', 'App\Http\Controllers\BlogController@save_comment')->name('save_comment');
虽然在您的表单中您写了 save-comment/
:
<form method="post" action="{{url('save-comment/'.Str::slug($blog->title).'/'. $blog->id)}}">
错误是因为这个。因此,我建议您像这样修改表单中的操作 save_comment/
:
<form method="post" action="{{url('save_comment/'.Str::slug($blog->title).'/'. $blog->id)}}">
这应该是固定的!