Home > Enterprise >  Trying to Save Comments but the application redirects me to an empty page
Trying to Save Comments but the application redirects me to an empty page

Time:11-06

I've made a blog and now I'm trying to implement a comment section. I want it so that when the user tries to post, it's saves the comment and redirects the user to the same page. But when I write a comment and try to post it, the application redirects me to a different page. I'm learning how to make a blog with laravel, so I don't know when to use url and when to use routes. Here's the code that I've written.

@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" hljs-number">5"></textarea>
                    <input type="submit" hljs-number">3">
                </div>
                    
            </ul>
        </div>
        @endauth
        <div hljs-number">5 col-lg-8">
            <h5 hljs-number">4">Comments<span hljs-number">2"> {{count($blog->comments)}}</span></h5>
            <div hljs-number">3">
                @if($blog->comments)
                    @foreach($blog->comments as $comment)
                    <blockquote hljs-string">">
                        <p hljs-number">0">{{$comment->comment}}</p>
                        <footer hljs-string">">Username</footer>
                    </blockquote>
                    <hr>
                    @endforeach
                @endif
            </div>
        </div>

BlogController :

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();
}

Routes :

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');

If there's someone willing to assist come up with a solution to this problem, please assist me. I think the problem lies where I've written the url lies. When I change the url to route, it gives me an error of route not defined.

Route::resource('/blog','App\Http\Controllers\BlogController');

CodePudding user response:

It redirects you to an empty page because you made a mistake on the url of your route. In your web.php file, your route is :

 Route::post('save_comment/{slug}/{id}', 'App\Http\Controllers\BlogController@save_comment')->name('save_comment');

While in your form you wrote save-comment/ :

 <form method="post" action="{{url('save-comment/'.Str::slug($blog->title).'/'. $blog->id)}}">

The error is due to this. I therefore advise you to modify the action in your form like this save_comment/:

 <form method="post" action="{{url('save_comment/'.Str::slug($blog->title).'/'. $blog->id)}}">

This should be fixed !

CodePudding user response:

Please change your code like this and check... 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();
}
  • Related