2017-06-12 24 views
0

私はストアサイトを持っています。 OrderControllerとPanelCotrollerのデータをモデルオーダーの最後のorderIdで共有したいと思います。ここに私のコードです: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を呼び出す必要があります。私は注文からそこにオブジェクトを作成すると、その後、私の関数はnullを私に返し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

あなたが他のコントローラに値を得ることができる2つの方法があります -

  1. BaseControllerの値を設定し、必要に応じてその値を拡張します。
  2. 複数の要求を通じてその値を保持するセッション変数を作成します。

私は第2の方法を好むでしょう。

関連する問題