【问题标题】:got 302 on form update in laravel在 laravel 的表单更新中得到 302
【发布时间】:2018-11-05 12:08:18
【问题描述】:

我在发布数据以更新成功更新的所有内容时遇到 302 重定向问题,除了我得到 302 和我的页面重定向的图像。

这是我的表单刀片代码:

{!! Form::model($post, ['method' => 'PATCH','route' => ['posts.update', $post->id],'data-parsley-validate' => '','class' => 'form-horizontal','files'=>true,'name'=>'updateabout']) !!}

<div class="col-md-8">

    <input type="hidden" name="csrf_test_name" value="{!! csrf_token() !!}">
    <div class="form-group">
        <label class="col-md-2 control-label"> Title : </label>
        <div class="col-md-10">
            <input class="form-control " name="title" type="text" value="{{$post->title}}" id="title">
        </div>
    </div>

    <div class="form-group">
        <label class="col-md-2 control-label">Slug:</label>
        <div class="col-md-10">
            <input class="form-control" name="slug" type="text" value="{{$post->slug}}" id="slug">
        </div>
    </div>
    <div class="form-group">
        <label class="col-md-2 control-label">Category:</label>
        <div class="col-md-10">
            {{ Form::select('category_id', $categories, null, ['class' => 'form-control']) }}

        </div>
    </div>
    <div class="form-group">
        <label class="col-md-2 control-label">Tags:</label>
        <div class="col-md-10">
            {{ Form::select('tags[]', $tags, null, ['class' => 'form-control select2-multi', 'multiple' => 'multiple']) }}
        </div>
    </div>


    <div class="form-group">
        <label class="col-md-2 control-label">Short-Description:</label>
        <div class="col-md-10">
            <textarea name="short_description" class="form-control" maxlength="140" rows="7" required
                      id="shortdesc">{{$post->short_description}}</textarea>
            <script src="{{ asset("/public/admin/ckeditor/ckeditor.js") }}"></script>
            <script>
                CKEDITOR.replace('shortdesc', {
                    height: 100,
                    toolbar: 'Custom', //makes all editors use this toolbar
                    toolbarStartupExpanded: false,
                    toolbarCanCollapse: false,
                    toolbar_Custom: [] //define an empty array or whatever buttons you want.
                });
            </script>
        </div>
    </div>

    <div class="form-group">
        <label class="col-md-2 control-label">Date:</label>
        <div class="col-md-10">
            {{ Form::text('date', null, ['class' => 'form-control','id'=>'date']) }}
        </div>
        <script type="text/javascript">
            $(document).ready(function () {
                $(function () {
                    $('#date').datepicker({format: 'HH:mm:ss'});
                })
            });
        </script>
    </div>


    <div class="form-group">
        <label class="col-md-2 control-label"> Image: </label>
        <div class="col-md-10">
            <img src="{{asset($post->image)}}" height="200" width="579">
            <input type="hidden" name="imageold" value="{{$post->image}}">
        </div>
    </div>
    <div class="form-group">
        <label class="col-md-2 control-label">Change Image: </label>
        <div class="col-md-10">
            <input type="file" name="imagemain" id="file">
        </div>
    </div>


    <div class="form-group">
        <label class="col-md-2 control-label">Description:</label>
        <div class="col-md-10">
            {{ Form::textarea('description', null, ['class' => 'form-control','id'=>'long_description']) }}
            <script src="//cdn.tinymce.com/4/tinymce.min.js"></script>
            <script>
                tinymce.init({
                    selector: '#long_description',
                    convert_urls: false,
                    statusbar: false,
                    height: '300',
                    plugins: 'image code print preview fullpage  searchreplace autolink directionality  visualblocks visualchars fullscreen image link    table charmap hr pagebreak nonbreaking  toc insertdatetime advlist lists textcolor wordcount   imagetools    contextmenu colorpicker textpattern media ',
                    toolbar: 'formatselect | bold italic strikethrough forecolor backcolor | link | alignleft aligncenter alignright alignjustify  | numlist bullist outdent indent  | removeformat |undo redo | image code| link fontsizeselect  | ',

                    image_title: true,
                    automatic_uploads: true,
                    images_upload_url: '{{url("/admin/upload")}}',
                    file_picker_types: 'image',
                    file_picker_callback: function (cb, value, meta) {

                        var input = document.createElement('input');
                        input.setAttribute('type', 'file');
                        input.setAttribute('accept', 'image/*');

                        input.onchange = function () {
                            var file = this.files[0];

                            var reader = new FileReader();
                            reader.readAsDataURL(file);
                            reader.onload = function () {
                                var id = 'blobid' + (new Date()).getTime();
                                var blobCache = tinymce.activeEditor.editorUpload.blobCache;
                                var base64 = reader.result.split(',')[1];
                                var blobInfo = blobCache.create(id, file, base64);
                                blobCache.add(blobInfo);
                                cb(blobInfo.blobUri(), {title: file.name});
                            };
                        };
                        input.click();
                    }
                });
            </script>
        </div>
    </div>

    <div class="form-group">
        <label class="col-md-2 control-label">Meta-title:</label>
        <div class="col-md-10">
            {{ Form::textarea('meta_title', null, ['class' => 'form-control','id'=>'meta-title']) }}
            <script>
                CKEDITOR.replace('meta-title', {
                    height: 100,
                    toolbar: 'Custom', //makes all editors use this toolbar
                    toolbarStartupExpanded: false,
                    toolbarCanCollapse: false,
                    toolbar_Custom: [] //define an empty array or whatever buttons you want.
                });
            </script>
        </div>
    </div>

    <div class="form-group">
        <label class="col-md-2 control-label">Meta-Keywords:</label>
        <div class="col-md-10">
            {{ Form::textarea('meta_keywords', null, ['class' => 'form-control','id'=>'meta-keywords']) }}
            <script src="{{ asset("/public/admin/ckeditor/ckeditor.js") }}"></script>
            <script>
                CKEDITOR.replace('meta-keywords', {
                    height: 100,
                    toolbar: 'Custom', //makes all editors use this toolbar
                    toolbarStartupExpanded: false,
                    toolbarCanCollapse: false,
                    toolbar_Custom: [] //define an empty array or whatever buttons you want.
                });
            </script>

        </div>
    </div>

    <div class="form-group">
        <label class="col-md-2 control-label">Posted By:</label>
        <div class="col-md-10">
            {{ Form::text('authorname', null, ['class' => 'form-control']) }}
        </div>
    </div>

    <hr>

    <br>

    <div class="form-group row">
        <div class="col-sm-offset-3 col-sm-6">
            {{ Form::submit('Update Post', array('class' => 'btn btn-success')) }}
            <a type="button" id="addslide" class="btn btn-danger">Cancel</a>
        </div>
    </div>
</div>


{!! Form::close() !!} 

和我的控制器:

public function update(Request $request, $id)
{
    // Validate the data
    $postdata = Post::find($id);

    //print_r($post);

    if ($request->input('slug') == $postdata->slug) {
        //echo 'slug match';
        //exit();
        $this->validate($request, [
            'title'            => 'required|max:255',
            'category_id'      => 'required|integer',
            'long_description' => 'required',
        ]);
    } else {
        //echo 'new slug matching';
        //exit();
        $this->validate($request, [
            'title'            => 'required|max:255',
            'slug'             => 'required|alpha_dash|min:5|max:255|unique:posts,slug',
            'category_id'      => 'required|integer',
            'long_description' => 'required',
        ]);
    }

    if ($request->hasFile('imagemain')) {

        //echo 'request has old file to unlink ';
        // exit();
        //unlink($request->get('image'));
        // Get filename with the extension
        $filenameWithExt = $request->file('imagemain')->getClientOriginalName();
        // Get just filename
        $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
        // Get just ext
        $extension = $request->file('imagemain')->getClientOriginalExtension();
        $fileNameToStore = $filename . '_' . time() . '.' . $extension;
        // Upload Image
        $path = $request->file('imagemain')->move('public/blogsimages', $fileNameToStore);
        // Filename to store
        echo $fileNameToStore = $path;
    } else {
        $fileNameToStore = $request->input('imageold');
        // exit();
    }

    // Save the data to the database
    $post = Post::find($id);

    $post->title = $request->input('title');
    $post->slug = $request->input('slug');
    $post->category_id = $request->input('category_id');
    $post->description = $request->input('description');
    $post->short_description = $request->input('short_description');
    $post->date = $request->input('date');
    $post->image = $fileNameToStore;
    $post->meta_title = $request->input('meta_title');
    $post->meta_keywords = $request->input('meta_keywords');
    $post->authorname = $request->input('authorname');

    $post->save();

    if (isset($request->tags)) {
        $post->tags()->sync($request->tags);
    } else {
        $post->tags()->sync([]);
    }

    // set flash data with success message
    Session::flash('success', 'This post was successfully saved.');

    // redirect with flash data to posts.show
    return redirect()->route('posts.show', $post->id);
}

当我发布数据时,除了显示 302 的图像和表单外,所有内容都根据要求更新,这里是屏幕截图: 我的路线是:Route::resource('posts', 'PostController');

【问题讨论】:

  • 302 状态码表示发生了重定向。您正在使用 return redirect()-&gt;route('posts.show', $post-&gt;id); 进行重定向

标签: php mysql forms laravel http-status-code-302


【解决方案1】:

我认为验证脚本有错误 请尝试代码

public function update(Request $request, $id)
{
    // Validate the data
    $postdata = Post::find($id);

    //WITHOUT VALIDATION



    if ($request->hasFile('imagemain')) {

        //echo 'request has old file to unlink ';
        // exit();
        //unlink($request->get('image'));
        // Get filename with the extension
        $filenameWithExt = $request->file('imagemain')->getClientOriginalName();
        // Get just filename
        $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
        // Get just ext
        $extension = $request->file('imagemain')->getClientOriginalExtension();
        $fileNameToStore = $filename . '_' . time() . '.' . $extension;
        // Upload Image
        $path = $request->file('imagemain')->move('public/blogsimages', $fileNameToStore);
        // Filename to store
        echo $fileNameToStore = $path;
    } else {
        $fileNameToStore = $request->input('imageold');
        // exit();
    }

    // Save the data to the database
    $post = Post::find($id);

    $post->title = $request->input('title');
    $post->slug = $request->input('slug');
    $post->category_id = $request->input('category_id');
    $post->description = $request->input('description');
    $post->short_description = $request->input('short_description');
    $post->date = $request->input('date');
    $post->image = $fileNameToStore;
    $post->meta_title = $request->input('meta_title');
    $post->meta_keywords = $request->input('meta_keywords');
    $post->authorname = $request->input('authorname');

    $post->save();

    if (isset($request->tags)) {
        $post->tags()->sync($request->tags);
    } else {
        $post->tags()->sync([]);
    }

    // set flash data with success message
    Session::flash('success', 'This post was successfully saved.');

    // redirect with flash data to posts.show
    return redirect()->route('posts.show', $post->id);
}

这将解决您的问题。

【讨论】:

    【解决方案2】:

    302状态码含义:

    来自Here

    超文本传输​​协议 (HTTP) 302 找到重定向状态 响应码表示请求的资源已经 暂时移到Location头给出的URL

    因此,在控制器的最后一行中,您正在执行重定向:

    return redirect()->route('posts.show', $post->id);
    

    此外,当 Laravel 验证失败时,它会自动重定向您。

    【讨论】:

    • 感谢您的回复@AliN11 即使我删除了该行仍然会转到同一页面而没有文件上传主要问题是......文件必须在更改时更新
    • 好的,检查验证
    • 脚本中没有验证错误一切正常,即使图像保存到文件夹但未在数据库中更新
    • @JagdishSharma 我没有发现您给定的代码有任何问题。你能找出问题出在哪里吗?
    • 如果是重定向回来,说明验证失败
    猜你喜欢
    • 1970-01-01
    • 2016-09-22
    • 2020-07-09
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2021-11-12
    相关资源
    最近更新 更多