【发布时间】:2021-11-18 09:03:47
【问题描述】:
我需要将$newOrder 传递给视图(orders.success),以便能够在订单完成后打印“收据”。似乎没有任何效果,我尝试过使用 compact/with 方法,但它始终未定义,因为 $newOrder 在另一个函数中声明。
你有什么建议吗?
class BraintreeController extends Controller
{
public function token(Request $request)
{
$gateway = new \Braintree\Gateway([
'environment' => 'sandbox',
'merchantId' => 'jgvy755pfvwdcjzx',
'publicKey' => 'qqpm93srfgwtx6dp',
'privateKey' => 'd13ce21a7642606db73b12bb1300d3fd'
]);
$clientToken = $gateway->clientToken()->generate();
if ($request->input('nonce') != null) {
$request->validate([
'name' => 'required',
'last_name' => 'required',
'phone' => 'required',
'address' => 'required',
'email' => 'email:rfc',
]);
//# Storo l'ordine
$name = $request->input('name');
$last_name = $request->input('last_name');
$address = $request->input('address');
$phone = $request->input('phone');
$email = $request->input('email');
$arr_id = $request->input('arr_id');
$arr_quant = $request->input('arr_quant');
$delivery_fee = $request->input('delivery_fee');
//# Recupero tutti i piatti dell'ordine per calcolarne il totale
$dishes = Dish::findMany($arr_id);
$arrayLength = count($arr_id);
$amount = 0;
for ($i = 0; $i < $arrayLength; $i++) {
$amount += $dishes[$i]->price * $arr_quant[$i];
}
$amount += $delivery_fee;
//#
$newOrder = new Order();
$newOrder->status = 1;
$newOrder->address = $address;
$newOrder->user_name = $name;
$newOrder->user_surname = $last_name;
$newOrder->phone = $phone;
$newOrder->email = $email;
$newOrder->total = $amount;
$newOrder->save();
// // storo l'array di IDs
// Ciclo una volta per ogni piatto contenuto nell'ordine, salvo la relazione e la sua quantità
for ($i = 0; $i < $arrayLength; $i++) {
$dish_id = $arr_id[$i];
// Scrive nella tabella pivot dopo aver creato la relazione
$newOrder->dishes()->attach([$dish_id => ['quantity' => $arr_quant[$i]]]);
//
}
//#
var_dump($request->input('nonce'));
$nonceFromTheClient = $request->input('nonce');
$gateway->transaction()->sale([
'amount' => $amount,
'paymentMethodNonce' => $nonceFromTheClient,
'options' => [
'submitForSettlement' => True
]
]);
Mail::to($email)->send(new PaymentConfirmationMail());
return view('orders.success');
}
return view('orders.braintree', ['token' => $clientToken]);
}
public function success(Request $request)
{
return view('orders.success');
}
}
这是我尝试打印收据的视图
<body>
<div class="container mt-5 mb-5 text-center">
<h1>Pagamento avvenuto con successo</h1>
<h2 class="mb-5">il tuo ordine è stato preso in carico</h2>
<a href="{{route('restaurants.index')}}">Ritorna ai ristoranti</a>
<h1>{{$newOrder->address}}</h1>
</div>
【问题讨论】:
-
您是否要检索刚刚保存的新订单?如果是这样,您可以通过
$getTheNewOrder = Order::where('status', '=', 1)->where('address', '=', $request->address)->where('user_name', '=', $request->name)->where('user_surname', '=', $request->last_name)->where('phone', '=', $request->phone)->where('email', '=', $request->email)->latest()->first();进行查询。在return view('orders.success');之前添加此内容,并确保使用return view('orders.success', compact('getTheNewOrder'));编辑您的退货视图 -
是的,目标是检索新订单。尝试了您的解决方案,但 $getTheNewOrder 仍然为空...
-
您应该在
token函数中包含我提到的查询,以便它仍然保留$getTheNewOrder查询中使用的$request值。