با عرض سلام
در BasketController متد زیر مشکل دارد ، متغیر order مقدار null رو برمیگردونه
BasketController.php codes :
private $basket;
private $transaction;
public function __construct(Basket $basket , Transaction $transaction)
{
$this->middleware('auth')->only(['checkoutForm','checkout']);
$this->basket = $basket;
$this->transaction = $transaction;
}
public function checkout(Request $request)
{
$this->validateForm($request);
$order = $this->transaction->checkout();
if(!is_null($order)){
return redirect()->route('home')->with('success', __('payment.your order has been registered', ['orderNum' => $order->id]));
}
return 'Order is Empty';
}
-----------------------------------------------------
Transaction.php codes :
public function checkout()
{
DB::beginTransaction();
try{
$order = $this->makeOrder();
$payment = $this->makePayment($order);
DB::commit();
}catch(\Exception $e){
DB::rollBack();
return null;
}
if ($payment->isOnline()) {
$this->gatewayFactory()->pay($order);
}
$this->completeOrder($order);
return $order;
}
private function makeOrder()
{
$order = Order::create([
'user_id' => auth()->user()->id,
'code' => bin2hex(str_random(16)),
'amount' => $this->basket->subTotal()
]);
$order->products()->attach($this->products());
return $order;
}
private function makePayment($order)
{
return Payment::create([
'order_id' => $order->id,
'pay_method' => $this->request->pay_method,
'amount' => $order->amount,
]);
}
private function gatewayFactory()
{
$gateway = [
'saman' => Saman::class,
'pasargad' => Pasargad::class
][$this->request->gateway];
return resolve($gateway);
}
private function completeOrder($order)
{
$this->normalizeQuantity($order);
event(new OrderRegistered($order));
$this->basket->clear();
}
استاد من بررسی کردم ، دقیقا خطایی که میده برای دستور زیر هست
$order = $this->transaction->checkout();
که توی متد checkout در فایل BasketController وجود دارد ، که میرسه به متدهای makeOrder و makePayment ، متد اولی یعنی makeOrder درست کار میکنه اما متد دوم دقیقا برای اون موردی که توی یه پست دیگه خدمتتون گفته بودم بخاطر خالی بودن فیلد gateway خطا میده ، لطفا راهنمایی بفرمایید چطوری این فیلد رو در این بخش هندل کنم ، توی حالتی که کدهاش بالا موجود هست این فیلد وجود نداره
به این شکل مقدار دهی کردم
private function makePayment($order)
{
return Payment::create([
'order_id' => $order->id,
'pay_method' => $this->request->pay_method,
'amount' => $order->amount,
'gateway' => $this->request->gateway,
]);
}
سلام ...
نیازی نیست که مقدار gateway رو داخل متد makePayment ایجاد کنید ... داخل ویدیو هم من اینکار رو انجام ندادم .. ویدیو و یا سورس کد رو با دقت مطالعه کنید متوجه مشکل خواهید شد.
استاد من طبق آموزش پیش رفتم خطا داشتم ، یکی یکی بررسی کردم به اینجا رسیدم که این خط رو اضاف کنم
توی ویدئوهای مربوط به پروژه های دیگه یه خط کد دیگه ای اضافه کردید که فرصت نکردم هنوز اونو بررسی کنم که این خطی که نوشتم رو بردارم برنامه درست کار میکنه با اون یا نه ، حتما بررسی کردم نتیجه رو میزارم