所以我目前在我的系统上进行了验证,它将检查这两个日期之前是否输入过。如果他们有,用户不能继续结账,如果他们有不同的日期,他们可以继续。然而,我遇到的问题是,这种验证适用于任何酒店,并且应该只针对他们预订的一家酒店。
例如,如果一号酒店预订的是2019年4月18日,而我想在同一天预订二号酒店,验证将不允许我退房,因为日期相同。这是不正确的,它应该让我通过,因为它是一家不同的酒店,即使日期是一样的。
我现在想继续检查是否选择了相同的酒店和日期,如果它们是相同的,那么我们就不能继续了。下面的函数用于我的验证:
public function getCheckout(Request $request)
{
if (!Session::has('cart')) {
return view('shop.shopping-cart');
}
//$post = Post::find($id);
$oldCart = Session::get('cart');
$cart = new Cart($oldCart);
$total = $cart->totalPrice;
$checkIn = $request->input('checkIn');
$checkOut = $request->input('checkOut');
$post = Order::where('checkIn', '=', $checkIn)
->where('checkOut', '=', $checkOut)
->get();
if (count($post) > 1) {
return redirect()->route('posts.shopping-cart')->with('Sorry this date has been taken');
} else {
return view('posts.checkout', ['total' => $total, 'checkIn' => $checkIn, 'checkOut' =>
$checkOut]);
}
}
现在的问题是,我也没有通过酒店$id。下面的函数最初将我的$id添加到购物车中,我如何将$id准确地添加到"getCheckout"函数中并验证它?
public function getAddToCart(Request $request, $id)
{
$post = Post::find($id);
$cart = Session::has('cart') ? Session::get('cart') : null;
if (!$cart) {
$cart = new Cart($cart);
}
$cart->add($post, $post->id);
Session::put('cart', $cart);
// dd($request->session()->get('cart'));
return redirect()->route('posts.index');
}
如果有人能帮忙,那就太好了。我只需要将酒店ID输入我的支票中,然后检查酒店、入住和退房日期是否都符合
我无法从代码中判断出您的路线是什么样子的,但目前在我看来,最简单的方法是这样修改您的getCheckout
路线:
Route::post('checkout/{hotelId}', 'CheckoutController@getCheckout');
然后在你的方法中,你可以像这样获取它:
public function getCheckout(Request $request, $hotelId)
{
...
}
从您的表单调用路由(如果您正在进行POST请求(当然必须进行修改,以便它包括您需要的ID,如下所示:
<form action="{{ route('checkout', $hotelId) }}" method="POST">