Laravel 上的“Action App\Http\Controllers\CommentRepliesController@createReply 未定义”错误

Posted

技术标签:

【中文标题】Laravel 上的“Action App\\Http\\Controllers\\CommentRepliesController@createReply 未定义”错误【英文标题】:"Action App\Http\Controllers\CommentRepliesController@createReply not defined" error on LaravelLaravel 上的“Action App\Http\Controllers\CommentRepliesController@createReply 未定义”错误 【发布时间】:2019-04-13 14:12:34 【问题描述】:

我正在尝试在帖子中添加回复 cmets 的选项,但我不断收到:

CommentRepliesController@createReply 未定义。

通过PostCommentsController@store 添加对帖子的回复非常有效。但是,当我尝试通过返回帖子或直接转到 URL 中的comment/reply 来添加对评论的回复时,它给了我上面的错误。

以下是我的路线:

Route::group(['middleware'=>'auth'], function()
    Route::resource('comment/reply', 'CommentRepliesController@createReply');
);

以下是我的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();


以下是我的 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" >

    <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   class="media-object" src="$comment->photo" >
                </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" >
                        </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

提前谢谢你。

【问题讨论】:

尝试php artisan route:list 获取所有已定义路线的列表。 你有一个错误我的朋友 Route::resource('comment/reply', 'CommentRepliesController@createReply');将其更改为 Route::post('comment/reply', 'CommentRepliesController@postReply'); 【参考方案1】:

Laravel 资源路由通过一行代码将典型的“CRUD”路由分配给控制器。

Route::resource 自动使用资源控制器中的“CRUD”操作。请参阅文档here

如果您想在控制器中使用特定功能,请不要使用Route::resource。使用任何你想要的方法。例如,如果您的方法是 POST,请像这样使用 Route::post

Route::group(['middleware'=>'auth'], function()
    Route::post('comment/reply', 'CommentRepliesController@createReply');
);

【讨论】:

以上是关于Laravel 上的“Action App\Http\Controllers\CommentRepliesController@createReply 未定义”错误的主要内容,如果未能解决你的问题,请参考以下文章

Xampp 上的 Laravel 框架安装失败

Laravel 8 上的 ArgumentCountError

Heroku 上的 Laravel 5.4。 Forbidden 您无权访问此服务器上的 /

laravel 上的支付宝

PHP 5.6.9 上的 Laravel 5 TokenMismatchException

Laravel 5 上的 Instagram 集成