2017-06-12 70 views
0

我有商店網站。我希望將OrderController和PanelCotroller數據與我的模型訂單中的最後一個訂單ID進行分享。這裏是我的代碼:Laravel在少數控制器之間共享數據

class OrderController extends Controller 
{ 
private $errors = []; 

public function addOrder() 
{ 

    if (!Auth::check()) { 
     $this->errors[] = 'error'; 
     return redirect()->back()->with('errors', $this->errors); 
    } 

    $userId = Auth::id(); 

    $order = new Order(); 
    $isOrdered = $order->addOrder($userId, $this->cart); 

    if ($isOrdered){ 
     return redirect('panel')->with('info', 'Everything fine'); 
    } 

} 

} 

現在我的函數addOrder返回true或false。當我調用函數getOrderId時,我可以在OrderController上看到orderId。但我想在PanelController - mainSite操作中調用getOrderId。當我創建那裏對象從訂單,然後我的函數getOrderId返回我空...

class Order extends Model 
{ 
protected $table = 'orders'; 
public $timestamps = false; 
private $orderId; 


public function addOrder($userId, Cart $cart) 
{ 

    $order = new Order(); 
    $order->user_id = $userId; 
    $order->save(); 

    foreach ($cart->getItems() as $cartProduct) { 

     $orderProducts = new OrderProduct(); 
     $orderProducts->product_id = $cartProduct->getProduct()->id; 
     $orderProducts->order_id = $order->id; 
     $orderProducts->quantity = $cartProduct->getQuantity(); 
     $orderProducts->price = $cartProduct->getProduct()->price; 
     $orderProducts->save(); 
    } 

    $cart->clear(); 
    $this->orderId = $order->id; 

    return true; 

} 


public function getOrderId() 
{ 

    return $this->orderId; 

} 

} 

而這裏是我的PanelController。

類PanelController擴展控制器 {

public function mainSite() 
{ 

    if (Auth::check()) { 

     $order = new Order(); 
     $order -> getOrderId() <---- here return me null instead my 
     last OrderId. 

     return View("panel"); 
    } else { 
     return redirect('/login'); 
    } 
} 

我該怎麼辦我的我的變量訂單ID或方法getOrderId是可見的所有控制器?

回答

1

創建訂單後,將id添加到您的會話中。然後在PanelController中,您可以從您的會話中獲得該ID。

OrderController:

$order = new Order(); 
$isOrdered = $order->addOrder($userId, $this->cart); 
session(['orderid' => $order->id]); 


PanelController:

if (session()->has('orderid')) 
    $order = Order::find(session('orderid')); 
else 
    dd('No order id found in session!'); 
+0

Thx,這個提示非常有幫助。 – wenus

1

有兩種方法,你可以在其他控制器獲得價值 -

  1. BaseController中設置該值並將其擴展到任意位置。
  2. 創建一個Session變量,該變量將在多個請求中保持其值。

我會更喜歡第二種方法。

相關問題