【问题标题】:Laravel form submit unsuccessful returns blank page instead of redirect homeLaravel 表单提交不成功返回空白页而不是重定向主页
【发布时间】:2022-11-10 13:51:55
【问题描述】:

我有一个 laravel 表单,可以在提交时在数据库中创建一个新产品条目,应该被重定向回来,但我得到一个完全空白的页面,没有任何错误。当我检查时,我的数据库中没有新条目。该表单由各种文本字段、一个图像 URL 和一个多选的图像 URL 组成

请这是我的刀片模板

<form method="POST" action="{{ route('products.store') }}" enctype="multipart/form-data">
                                <h4 class="card-title">Create Product</h4><br><br>
                                @csrf

                                <div class="row">
                                    <div class="col">
                                        <div class="row mbr-1">
                                            <label for="example-text-input" class="col-sm-2 col-form-label">Name</label>
                                            <div class="col-sm-6">
                                                <input name="name" class="form-control" type="text" value=""
                                                    id="example-text-input">
                                            </div>
                                        </div>
                                        <!-- end row -->
                                    </div>
                                    <div class="col">

                                        <div class="row mb-3">
                                            <label for="example-text-input"
                                                class="col-sm-2 col-form-label">Category</label>
                                            <div class="col-sm-6">
                                                <input name="name" class="form-control" type="text" value=""
                                                    id="example-text-input">
                                            </div>
                                        </div>
                                        <!-- end row -->
                                    </div>
                                </div>
                        </div>


                        <div class="container">
                            <div class="row">
                                <div class="col">
                                    <div class="row mb-3">
                                        <label for="example-text-input" class="col-sm-2 col-form-label">Price</label>
                                        <div class="col-sm-6">
                                            <input name="catchy_title" class="form-control" type="number"
                                                value="" id="example-text-input">
                                        </div>
                                    </div>
                                    <!-- end row -->
                                </div>
                                <div class="col">
                                    <div class="row mb-3">
                                        <label for="example-text-input" class="col-sm-2 col-form-label">Status</label>
                                        <div class="col-sm-6">
                                            <input name="status" class="form-control" type="text" value=""
                                                id="example-text-input">
                                        </div>
                                    </div>
                                    <!-- end row -->
                                </div>
                            </div>
                        </div>



                        <div class="container">
                            <div class="row mb-3">
                                <label for="example-text-input" class="col-sm-2 col-form-label">Product
                                    Description</label>
                                <div class="col-sm-8">
                                    <textarea id="elm1" name="long_description" placeholder="Please enter a vivid description of the product"></textarea>
                                </div>
                            </div>
                            <!-- end row -->
                        </div>


                        <div class="container">
                            <div class="row">
                                <div class="col">
                                    <div class="row mb-3">
                                        <label for="example-text-input" class="col-sm-2 col-form-label">Tags</label>
                                        <div class="col-sm-6">
                                            <input name="tags" class="form-control" type="text" value=""
                                                id="example-text-input">
                                        </div>
                                    </div>
                                    <!-- end row -->
                                </div>
                                <div class="col">

                                    <div class="row mb-3">
                                        <label for="example-text-input" class="col-sm-2 col-form-label">Estimated
                                            Delivery
                                            Time</label>
                                        <div class="col-sm-6">
                                            <input name="estimated_delivery_time" class="form-control" type="text"
                                                value="" id="example-text-input">
                                        </div>
                                    </div>
                                    <!-- end row -->
                                </div>
                            </div>
                        </div>


                        <div class="container">
                            <div class="row">
                                <div class="col">
                                    <div class="row mb-3">
                                        <label for="example-text-input" class="col-sm-2 col-form-label">Available
                                            Quantity</label>
                                        <div class="col-sm-6">
                                            <input name="available_quantity" class="form-control" type="text"
                                                value="" id="example-text-input">
                                        </div>
                                    </div>
                                    <!-- end row -->
                                </div>
                                <div class="col">
                                    <div class="row mb-3">
                                        <label for="example-text-input" class="col-sm-2 col-form-label">Colors</label>
                                        <div class="col-sm-6">
                                            <input name="colors" class="form-control" type="text" value=""
                                                id="example-text-input">
                                        </div>
                                    </div>
                                    <!-- end row -->
                                </div>
                            </div>
                        </div>



                        <div class="container">
                            <div class="row">
                                <div class="col">
                                    <div class="row mb-3">
                                        <label for="example-text-input" class="col-sm-2 col-form-label">Supplier's
                                            Name</label>
                                        <div class="col-sm-6">
                                            <input name="supplier_name" class="form-control" type="text"
                                                value="" id="example-text-input">
                                        </div>
                                    </div>
                                    <!-- end row -->
                                </div>
                                <div class="col">
                                    <div class="row mb-3">
                                        <label for="example-text-input" class="col-sm-2 col-form-label">Supplier's
                                            Contact</label>
                                        <div class="col-sm-6">
                                            <input name="supplier_contact" class="form-control" type="text"
                                                value="" id="example-text-input">
                                        </div>
                                    </div>
                                    <!-- end row -->
                                </div>
                            </div>
                        </div>



                        <div class="container">
                            <div class="row">
                                <div class="col">
                                    <div class="row mb-3">
                                        <label for="example-text-input" class="col-sm-2 col-form-label">Video Url /
                                            Link</label>
                                        <div class="col-sm-6">
                                            <input name="video_description" class="form-control" type="text"
                                                value="" id="example-text-input">
                                        </div>
                                    </div>
                                    <!-- end row -->
                                </div>
                                <div class="col">
                                    <div class="row mb-3">
                                        <label for="example-text-input" class="col-sm-2 col-form-label">Primarry
                                            Image</label>
                                        <div class="col-sm-6">
                                            <input name="primary_image" accept="image/*" class="form-control"
                                                type="file" id="image">
                                        </div>
                                    </div>
                                    <!-- end row -->
                                </div>
                            </div>
                        </div>



                        <div class="container">
                            <div class="row">
                                <div class="col">
                                    <div class="row mb-3">
                                        <label for="example-text-input" class="col-sm-2 col-form-label"> Primary Image
                                            Preview</label>
                                        <div class="col-sm-6">
                                            <img id="showImage" class="" width="300px"
                                                src="{{ !empty($Product->image) ? url('upload/products/' . $product->image) : url('upload/no_image.jpg') }}"
                                                alt="Hero image">
                                        </div>
                                    </div>
                                    <!-- end row -->
                                </div>
                                <div class="col">
                                    <div class="row mb-3">
                                        <label for="example-text-input" class="col-sm-2 col-form-label">Add Other
                                            Images</label>
                                        <div class="col-sm-6">
                                            <input name="multi_image[]" accept="image/*" class="form-control"
                                                type="file" id="image" multiple="">
                                        </div>
                                    </div>
                                    <!-- end row -->
                                </div>
                            </div>
                            <input type="submit" class="btn btn-info waves-effect waves-light"
                                value="Create Product">
                            </form>

这是我的商店功能

 public function store(Request $request)
{
    if ($request->file('image')) {
        $image = $request->file('image');
        $name_gen = hexdec(uniqid()).'.'.$image->getClientOriginalExtension();  // 3434343443.jpg

        Image::make($image)->resize(523,605)->save('upload/home_about/'.$name_gen);
        $save_url = 'upload/products/'.$name_gen;

        $this->validate($request, [
            'name' => $request->name,
            'category' => $request->category,
            'price' => $request->price,
            'description' => $request->description,
            'status' => $request -> status,
            'tags' => $request -> tags,
            'estimated_delivery_time' => $request->estimated_delivery_time,
            'available_quantity' => $request->available_quantity,
            'colors' => $request->colors,
            'supplier_name' => $request->supplier_name,
            'supplier_phone' => $request->supplier_phone,
            'video_description' => $request->video_description,
            'primary_image' => $save_url,
            'other_images' => $save_url,

        ]);
        $notification = array(
        'message' => 'Product created successfully',
        'alert-type' => 'success'
    );

    return redirect()->back()->with($notification);
}

请问我做错了什么?

感谢您抽出一些时间来审查

【问题讨论】:

  • 当您 dd($request) 在您的商店方法的顶部时,您会得到什么?
  • 您对图像的 if 条件检查失败。
  • 在 store 函数内的代码顶部输入dd($request-&gt;all())。并验证您的请求是否到达了 store 功能。

标签: laravel laravel-8 laravel-9


【解决方案1】:

您正在验证请求但未将其保存到数据库。 在验证之后和返回之前,您应该这样做以保存在数据库中。

            $item=new YOUR_MODEL_NAME:
            $item->name => $request->name,
            $item->category => $request->category,
            $item->price => $request->price,
            $item->description => $request->description,
            $item->status => $request -> status,
            $item->tags => $request -> tags,
            $item->estimated_delivery_time => $request->estimated_delivery_time,
            $item->available_quantity => $request->available_quantity,
            $item->colors => $request->colors,
            $item->supplier_name => $request->supplier_name,
            $item->supplier_phone => $request->supplier_phone,
            $item->video_description => $request->video_description,
            $item->primary_image => $save_url,
            $item->other_images => $save_url,
            $item->save();

【讨论】:

    【解决方案2】:
    $this->validate($request, [
                'name' => $request->name,
                'category' => $request->category,
                'price' => $request->price,
                'description' => $request->description,
                'status' => $request -> status,
                'tags' => $request -> tags,
                'estimated_delivery_time' => $request->estimated_delivery_time,
                'available_quantity' => $request->available_quantity,
                'colors' => $request->colors,
                'supplier_name' => $request->supplier_name,
                'supplier_phone' => $request->supplier_phone,
                'video_description' => $request->video_description,
                'primary_image' => $save_url,
                'other_images' => $save_url,
    
            ]);
    

    在上面的 sn-p 中,您正在执行验证,但我没有在 store() 函数中看到将数据保存到数据库的请求。

    您还应该在$request 上调用validate() 方法,而不是$this

    首先,我想建议您使用表单请求 https://laravel.com/docs/9.x/validation#form-request-validation

    其次,在存储新模型时使用经过验证的数据和批量分配。

    Model::create($modelStoreRequest->validated());
    

    请注意,如果传入的请求字段未通过给定的验证规则,Laravel 将自动将用户重定向回他们之前的位置。此外,所有的验证错误和请求输入都会自动闪现到会话中。

    【讨论】:

      【解决方案3】:

      尝试具体,通过您想要重定向的路线,如下所示:

      return redirect()->route('route-name-here')->with($notification);
      

      【讨论】:

      • 为什么?如果有多个路由发布到此方法怎么办?
      猜你喜欢
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多