Skip to content
Advertisement

“Action AppHttpControllersCommentRepliesController@createReply not defined” error on Laravel

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');
});
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement