【问题标题】:laravel form submit uses wrong controller methodlaravel 表单提交使用了错误的控制器方法
【发布时间】:2021-07-05 17:39:23
【问题描述】:

我尝试使用表单提交产品评论,但我认为提交按钮使用了不正确的控制器存储方法。我有一个产品控制器和一个评论控制器。产品商店工作正常,我可以看到数据库在提交后被填充,但是当我提交产品评论时,它会从产品商店表单中抛出自定义错误消息。如果我将评论表单::open 更改为产品表单::open 它将引发错误:此路由不支持 PUT 方法。支持的方法:GET、HEAD、POST。

产品形式(正常工作)

        {!! Form::open(['action' => 'App\Http\Controllers\ProductsController@store', 'method' => 'POST', 'enctype' => 'multipart/form-data']) !!}

        ... labels and text ...

        {{ Form::submit('Submit', ['class' => 'btn btn-primary']) }}
        {!! Form::close() !!}

评价表

                <div>
                    <p>Write a review</p>
                    <!-- submit review form -->
                    {!! Form::open(['reviews' => 'App\Http\Controllers\ReviewsController@store']) !!}
                    <div class="form-group">

                        {{ Form::textarea('description', '', ['class' => 'form-control', 'placeholder' => 'Write your message']) }}
                    </div>

                    <div class="form-group">
                        {{ Form::label('rating', 'Rating') }}
                        {{ Form::select('rating', ['1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5'], '1') }}
                    </div>

                    {{ Form::hidden('_method', 'PUT') }}
                    {{ Form::submit('Submit', ['class' => 'btn btn-primary']) }}
                    {!! Form::close() !!}

                </div>

评论控制器存储

    public function store(Request $request, $id)
    {
        $this->validate($request, ['description' => 'nullable',
  'rating' => 'nullable',
        ]);

        $review =  new Review;

        $review->rating = $request->input('rating');
        $review->reviewerid = auth()->user()->id;
        $review->productid = $id;
        $review->description = $request->input('description');

        $review->save();

        return redirect('/products/$id')->with('success', 'Review submitted');
    }

Web.php 文件

Route::get('/', 'App\Http\Controllers\PagesController@index');
Route::get('/about', 'App\Http\Controllers\PagesController@abouts');
Route::get('/cart', 'App\Http\Controllers\PagesController@cart');
Route::get('/checkout', 'App\Http\Controllers\PagesController@checkout');
Route::get('/dashboard', 'App\Http\Controllers\PagesController@services');
Route::get('/categories/{Category}', 'App\Http\Controllers\PagesController@category');
Route::resource('reviews', 'App\Http\Controllers\ReviewsController');
Route::resource('products', 'App\Http\Controllers\ProductsController');
Auth::routes();

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    错误是因为这行:

    Form::hidden('_method', 'PUT')
    

    你告诉 laravel 使用 put 方法。删除它,它会正常工作。

    对于您的表单操作,我认为您已在此行中输入:

    {!! Form::open(['reviews' => 'App\Http\Controllers\ReviewsController@store']) !!}
    

    改成:

    {!! Form::open(['action' => 'App\Http\Controllers\ReviewsController@store']) !!}
    

    【讨论】:

    • 谢谢,看来我取得了一些进展。我必须运行“php artisan route:clear”命令才能显示出来
    猜你喜欢
    • 2014-04-12
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多