Laravel帖子被检测为方法不允许和禁止


Laravel post detected as method not allowed and forbidden

>我遇到了这个问题,即使路由设置为Route::post并且服务器返回 403 代码并且未检测到任何表单输入,我也会收到方法不允许异常。我应该怎么做才能将该方法正确接受为 POST 并且可以接收任何表单输入?

形式

<form data-role="none" method="post" data-ajax="false" action="http://www.example.com/sell/details/save">
                <div class="form-row">
                    <div class="title">
                        Product Descriptions /<br>
                        Additional Pictures /<br>
                        Video
                    </div>
                    <div class="control">
                            <div id="mceu_4" class="mce-tinymce mce-container mce-panel" hidefocus="1" tabindex="-1" role="application" style="visibility: hidden; border-width: 1px;"><div id="mceu_4-body" class="mce-container-body mce-stack-layout"><div id="mceu_5" class="mce-toolbar-grp mce-container mce-panel mce-stack-layout-item mce-first" hidefocus="1" tabindex="-1" role="group"><div id="mceu_5-body" class="mce-container-body mce-stack-layout"><div id="mceu_6" class="mce-container mce-toolbar mce-stack-layout-item mce-first mce-last" role="toolbar"><div id="mceu_6-body" class="mce-container-body mce-flow-layout"><div id="mceu_7" class="mce-container mce-flow-layout-item mce-first mce-last mce-btn-group" role="group"><div id="mceu_7-body"><div id="mceu_0" class="mce-widget mce-btn mce-first" tabindex="-1" aria-labelledby="mceu_0" role="button" aria-label="Bold"><button role="presentation" type="button" tabindex="-1"><i class="mce-ico mce-i-bold"></i></button></div><div id="mceu_1" class="mce-widget mce-btn" tabindex="-1" aria-labelledby="mceu_1" role="button" aria-label="Bullet list"><button role="presentation" type="button" tabindex="-1"><i class="mce-ico mce-i-bullist"></i></button></div><div id="mceu_2" class="mce-widget mce-btn" tabindex="-1" aria-labelledby="mceu_2" role="button" aria-label="Insert/edit video"><button role="presentation" type="button" tabindex="-1"><i class="mce-ico mce-i-media"></i></button></div><div id="mceu_3" class="mce-widget mce-btn mce-last mce-btn-has-text" tabindex="-1" aria-labelledby="mceu_3" role="button" aria-label="Upload an image"><button role="presentation" type="button" tabindex="-1"><i class="mce-ico mce-i-image"></i>Upload</button></div></div></div></div></div></div></div><div id="mceu_8" class="mce-edit-area mce-container mce-panel mce-stack-layout-item" hidefocus="1" tabindex="-1" role="group" style="border-width: 1px 0px 0px;"><iframe id="text-description_ifr" frameborder="0" allowtransparency="true" title="Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help" src='javascript:""' style="width: 100%; height: 300px; display: block;"></iframe></div><div id="mceu_9" class="mce-statusbar mce-container mce-panel mce-stack-layout-item mce-last" hidefocus="1" tabindex="-1" role="group" style="border-width: 1px 0px 0px;"><div id="mceu_9-body" class="mce-container-body mce-flow-layout"><div id="mceu_10" class="mce-path mce-flow-layout-item mce-first"><div role="button" class="mce-path-item mce-last" data-index="0" tabindex="-1" id="mceu_10-0" aria-level="0">p</div></div><label id="mceu_12" class="mce-wordcount mce-widget mce-label mce-flow-layout-item">Words: 0</label><div id="mceu_11" class="mce-flow-layout-item mce-resizehandle mce-last"><i class="mce-ico mce-i-resize"></i></div></div></div></div></div><textarea class="input-gradient control-row" data-role="none" name="text-description" id="text-description" height="200" aria-hidden="true" style="display: none;"></textarea>

                        <div class="caption-bold caption">
                            Add in additional details of your products (i.e. functions, specifications,
                            etc.) and also pictures / video to make your sale item more attractive
                        </div>
                    </div>
                </div>
                <!-- .form-row -->
                <div class="form-row">
                    <div class="title">Product Variations (if any)</div>
                    <div class="control" id="wrapper-variation">
                        <div class="control-row">
                            <div class="caption-bold caption">
                                <button type="button" class="btn btn-default ui-btn ui-shadow ui-corner-all" id="btn-add-more"><span class="fa fa-plus"></span> Add More
                                </button>
                            </div>
                        </div>
                        <input type="hidden" id="total_qty" value="10">

                        <div class="control-row">
                            <input type="text" class="input-gradient input-mobile" data-role="none" name="text-variation[0]" placeholder="Variation" value="">
                            <div class="caption caption-side">Qty</div>
                        <input type="text" class="promo input-gradient variation-qty" data-role="none" name="text-variation-qty[0]" placeholder="Qty" value="">
                        </div>


                    </div>
                    <div class="title"></div>
                    <div class="control">
                        <div class="control-row">
                            <div class="notice notice-check"></div>
                            <div class="notice notice-qty"></div>
                        </div>
                    </div>
                </div>
                <!-- .form-row -->
                <div class="form-row">
                    <div class="title">Delivery Method</div>
                    <div class="control">

                        <div class="control-row">
                            <input id="check-delivery" data-role="none" type="checkbox" name="check-delivery" value="1" class="input-gradient">
                            <label for="check-delivery" id="label-ig">Normal Postage
                            </label>
                            <input type="text" class="promo input-gradient" data-role="none" name="postage-fee" id="postage-fee" style="margin-left:4px;width:150px;" value="" placeholder="Set Cost">
                            <div class="notice"></div>
                        </div>
                        <div class="control-row">
                            <label id="label-ig" for="qty-postage-fee">
                                Adjust Postage Fee by Incremental Qty of
                            </label>
                            <input type="text" class="promo input-gradient" data-role="none" name="qty-postage-fee" id="qty-postage-fee" placeholder="Qty" value="">
                        </div>
                        <div class="control-row">
                            <div>
                                <p>Example: Postage Fee $1</p>

                                <p>
                                    By choosing an incremental qty of 5pcs, the cost of shipping
                                    1-5pcs will be $1. Subsequent 5 pcs will cost
                                    another $1, as such, the total of 10pcs would be $2.
                                </p>
                            </div>
                        </div>
                        <div class="control-row">
                            <input id="check-registered-mail" data-role="none" type="checkbox" name="check-registered-mail" value="1" class="input-gradient">
                            <label for="check-registered-mail" id="label-ig">Registered Mail</label>
                            <input type="text" class="promo input-gradient" data-role="none" name="mail-fee" id="mail-fee" style="margin-left:4px;width:150px;" value="" placeholder="Add. Cost">
                            <div class="notice"></div>
                        </div>
                        <div class="control-row">
                            <input id="check-self-col" data-role="none" type="checkbox" name="check-self-col" value="1" class="input-gradient">
                            <label for="check-self-col" id="label-ig">Self Collection</label>
                            <input type="text" class="promo input-gradient" data-role="none" name="self-location" id="self-location" style="margin-left:4px;width:250px;" value="" placeholder="Location">
                            <div class="notice"></div>

                        </div>

                        <div class="caption-bold caption">
                            Seller contact buyers directly to arrange pick-up at designated date,
                            time and location after the deal is confirmed.
                        </div>
                    </div>
                </div>
                <div class="form-row" style="text-align : center;">
                    <input type="submit" value="Save &amp; Continue" class="btn btn-form-pro">
                    <!-- the following button is only for demo but the commented submit button above is the original one-->
                    <!--button type="button" class="btn btn-form-pro btn-pop" id="btn-save-details">Save & Continue
                    </button-->
                </div>
            </form>

控制器,只需转储表单数据即可。

public function save()
{
var_dump(Input::all());
}

路线。

Route::post('/sell/details/save', 'SellDetailsController@save');

文本区域具有上传图像功能,并由 tinymce + jboil.me 插件提供支持。仅当 tinymce 上传了图像时,才会出现此问题,因此在 tinymce 编辑器中输入纯文本数据时,它将正常工作

所以

  1. 没有图像的输入,一切正常。
  2. 使用图像输入,不允许发生方法,并且输入::all()中没有表单数据。
  3. 使用图像输入,用Route::any而不是Route::post,禁止返回并且没有表单数据。

如何解决此问题并使图像和非图像输入正常工作?

谢谢。

您已经设置了"Route:post",但是您将表单中的方法设置为GET。所以该方法不允许。尝试使路由方法和表单方法相同。

由于TinyMCE将添加一个输入类型文件,因此您应该在表单中添加一个enctype属性:

<form [...] enctype="multipart/form-data">

如果表单标签是通过 Laravel 生成的,则使用以下命令:

{!! Form::open(array('url'=>'/sell/details/save','method'=>'POST', 'files'=>true)) !!}

在 html 表单中添加此行。

<input type="hidden" _token="{{ csrf_token }}" />