I am trying to add an option to reply to comments on a post, but I keep getting that:
CommentRepliesController@createReply is not defined.
Adding a reply to a post through PostCommentsController@store
works perfectly fine. But, when I try to add a reply to the comment by going back to the post or going directly to comment/reply
in the URL, it gives me the error above.
Following is my route:
Route::group(['middleware'=>'auth'], function(){ Route::resource('comment/reply', 'CommentRepliesController@createReply'); });
Following is my CommentRepliesController@createReply
:
public function createReply(Request $request){ $user = Auth::user(); if($user->photo){ $data = [ 'comment_id' => $request->comment_id, 'author' => $user->name, 'email' => $user->email, 'photo' => $user->photo->file, 'body' => $request->body ]; } else{ $data = [ 'comment_id' => $request->comment_id, 'author' => $user->name, 'email' => $user->email, 'body' => $request->body ]; } CommentReply::create($data); $request->session()->flash('reply_message', 'Your reply has been submitted and is awaiting moderation.'); return redirect()->back(); }
And following is my post.blade.php:
@extends('layouts.blog-post') @section('content') <!-- Blog Post --> <!-- Title --> <h1>{{$post->title}}</h1> <!-- Author --> <p class="lead"> by <a href="#">{{$post->user->name}}</a> </p> <hr> <!-- Date/Time --> <p><span class="glyphicon glyphicon-time"></span> Posted on {{$post->created_at->diffForHumans()}}</p> <hr> <!-- Preview Image --> <img class="img-responsive" src="{{$post->photo->file}}" alt=""> <hr> <!-- Post Content --> <p class="lead"> <p>{{$post->body}}</p> <hr> @if(Session::has('comment_message')) {{session('comment_message')}} @endif <!-- Blog Comments --> @if(Auth::check()) <!-- Comments Form --> <div class="well"> <h4>Leave a Comment:</h4> {!! Form::open(['method'=>'POST', 'action'=>'PostCommentsController@store'])!!} <input type="hidden" name="post_id" value="{{$post->id}}"/> <!--<input type="hidden" name="_token" value="{{ csrf_token() }}">--> {!! csrf_field() !!} <div class="form-group"> {!! Form::label('body','Body: ') !!} {!! Form::textarea('body', null, ['class'=>'form-control', 'rows'=>3]) !!} </div> <div class="form-group"> {!! Form::submit('Post Comments', ['class'=>'btn btn-primary']) !!} </div> {!! Form::close() !!} </div> @endif <hr> <!-- Posted Comments --> @if(count($comments) > 0) @foreach($comments as $comment) <!-- Comment --> <div class="media"> <a class="pull-left" href="#"> <img height="64" width="64" class="media-object" src="{{$comment->photo}}" alt=""> </a> <div class="media-body"> <h4 class="media-heading">{{$comment->author}} <small>{{$comment->created_at->diffForHumans()}}</small> </h4> <p>{{$comment->body}}</p> <!-- Nested Comment --> <div class="media"> <a class="pull-left" href="#"> <img class="media-object" src="http://placehold.it/400x400" alt=""> </a> <div class="media-body"> <h4 class="media-heading">Nested Start Bootstrap <small>August 25, 2014 at 9:30 PM</small> </h4> Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. </div> </div> <!-- End Nested Comment --> @if(Session::has('reply_message')) <p class="bg-danger">{{session('reply_message')}}</p> @endif <!--Comment Reply Form--> {!! Form::open(['method'=>'POST', 'action'=>'CommentRepliesController@createReply'])!!} <div class="form-group"> <input type="hidden" name="comment_id" value="{{comment_id}}"/> {!! Form::label('body','Body: ') !!} {!! Form::textarea('body', null, ['class'=>'form-control', 'rows'=>1]) !!} </div> <div class="form-group"> {!! Form::submit('Reply', ['class'=>'btn btn-primary']) !!} </div> {!! Form::close() !!} <!--End of Comment Reply Form--> </div> </div> @endforeach @endif @stop
Thank you in advance.
Advertisement
Answer
Laravel resource routing assigns the typical “CRUD” routes to a controller with a single line of code.
Route::resource
automatically uses the “CRUD” operations in your resource controller. See the docs here
If you want to use a specific function inside your controller, do not use Route::resource
. Use whatever method you want. For example, if your method is POST
use Route::post
like this:
Route::group(['middleware'=>'auth'], function(){ Route::post('comment/reply', 'CommentRepliesController@createReply'); });