【问题标题】:Form submission returns inputs Laravel表单提交返回输入 Laravel
【发布时间】:2019-11-04 05:31:00
【问题描述】:

我正在尝试创建一个提交表单,如果用户提交表单,它应该将他重定向到确认控制器中的下一页。到目前为止,它使用这样的输入重定向回来 {"shipping_city":"gfg","shipping_phone":"087484","shipping_name":"Hellle",}

这是我的代码

结帐控制器

 public function store(Request $request)
 {
    foreach(session('cart')  as $productId =>$item);
    $product = product::find($productId);
    //Insert into orders table
    $order = Order::create([
        'shipping_city' => $request->city,
        'shipping_phone' => $request->phone,
         'shipping_name' => $request->name,
    ]);


    if ($order) {
        foreach(session('cart')  as $productId =>$item) {
           if (empty($item)) {
               continue;
           }
           $product = product::find($productId);
           OrderProduct::create([
            'order_id' => $order->id ?? null,
            'product_id' => $productId,
            'quantity' => $item['quantity'],
        ]);
       }
       return $order;
    }
    $cart = session()->remove('cart');
     return redirect()->route('confirmation.index');
   }

Checkout.blade

    <form action="{{ route('checkout.store') }}" method="POST" id="payment-form">
        {{ csrf_field() }}
         <div class=shippingform>
        <div class="form-group">
        </div>
        <div class="form-group">
            <label for="name">Name</label>
            <input type="text" class="form-control" id="name" name="name" value="{{ auth()->user()->name }}" required>
        </div>

        <div class="half-form">
            <div class="form-group">
                <label for="city">City</label>
                <input type="text" class="form-control" id="city" name="city" value="{{ old('city') }}" required>
            </div>

        </div> <!-- end half-form -->
            <div class="form-group">
                <label for="phone">Phone</label>
                <input type="text" class="form-control" id="phone" name="phone" value="{{ old('phone') }}" required>
            </div>
        <div class="spacer"></div>
        <div class="spacer"></div>
        <button type="submit" id="complete-order" class="buttons-primary full-width">Complete Order</button>
    </form>

确认控制器

  public function index()
 {
    {
        if (! session()->has('success_message')) {
            return redirect('/');
        }

        return view('thankyou');
    }
 }

路线

 Route::post('/checkout', 'CheckoutController@store')->name('checkout.store');

任何帮助将不胜感激。

【问题讨论】:

  • if ($order) { ... return $order; } $cart = session()-&gt;remove('cart'); return redirect()-&gt;route('confirmation.index'); 这看起来你只是错误地交换了案例:当你找到一个订单时,你应该重定向用户,而不仅仅是返回输入值。还是我错过了什么?
  • 下订单后我想将用户重定向到感谢页面@TobiasF。
  • 那么这是一个简单的错误,请仔细查看您何时返回代码中的内容。
  • 我不明白你能解释一下@TobiasF。

标签: php laravel forms laravel-5


【解决方案1】:

让我们看看你的代码当前做了什么,你想让它做什么:

带有 cmets 的当前代码:

public function store(Request $request) {
    foreach(session('cart')  as $productId =>$item);
    $product = product::find($productId);
    //Insert into orders table
    $order = Order::create([
        'shipping_city' => $request->city,
        'shipping_phone' => $request->phone,
        'shipping_name' => $request->name,
    ]);

    if ($order) { // If a new order was successfully created
        foreach(session('cart')  as $productId =>$item) {
           // Do some stuff with each item / product
        }
        return $order; // return the newly created order with it's data
    }
    // If we didn't created a new order for whatever reason
    $cart = session()->remove('cart');
    return redirect()->route('confirmation.index'); // Redirect user to the "confirmation.index" route
}

如您所见,您只需返回已创建订单的数据(当 $order 不为 false 时),否则您将重定向到“confirmation.index”页面。由于这总是与它应该做的相反(返回订单,尽管你应该被重定向到确认页面,反之亦然),你必须交换案例:

public function store(Request $request) {
    ...
    if ($order) { // If a new order was successfully created
        foreach(session('cart')  as $productId =>$item) {
           // Do some stuff with each item / product
        }
        $cart = session()->remove('cart');
        return redirect()->route('confirmation.index'); // Redirect user to the "confirmation.index" route
    }
    // If we didn't created a new order for whatever reason
    return false; // return something else, since we didn't create an order
}

【讨论】:

  • 如果我删除return $order,它会重定向到主页,并且订单不会显示在仪表板中(仅显示在数据库中)@Tobias
  • 我尝试用您的代码更改我的代码,但它在订单后重定向到主页,而不是 (confirmation.index) @Tobias F.
猜你喜欢
  • 2016-08-25
  • 2012-05-05
  • 2013-06-28
  • 2018-01-05
  • 2014-08-05
  • 2021-03-30
  • 1970-01-01
  • 2015-11-30
  • 2020-12-21
相关资源
最近更新 更多