2017-06-12 6 views
0

Ich habe Shop-Site. Und ich möchte zwischen OrderController und PanelCotroller Daten mit der letzten OrderId aus meiner Model Order teilen. Hier ist mein Code:Laravel teilen Daten zwischen wenigen Controllern

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'); 
    } 

} 

} 

Jetzt meine Funktion addOrder zurück wahr oder falsch. Ich kann orderId auf OrderController sehen, wenn ich die Funktion getOrderId aufruft. Aber ich möchte getOrderId in PanelController - MainSite Aktion aufrufen. Als ich dort Gegenstand von Auftrag zu erstellen, dann getOrderId meine Funktion zurückgeben mich null ...

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; 

} 

} 

Und hier meine PanelController ist.

Klasse PanelController erweitert Controller- {

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'); 
    } 
} 

Wie kann ich tun, um meine meine Variable orderId oder Methode getOrderId an alle Regler zu sehen war?

Antwort

1

Nach dem Erstellen der Bestellung fügen Sie die ID zu Ihrer Sitzung hinzu. Dann können Sie im PanelController die ID aus Ihrer Sitzung abrufen.

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, dieser Tipp war sehr hilfreich. – wenus

1

Es gibt zwei Möglichkeiten, wie Sie den Wert in anderen Steuerungen erhalten können -

  1. Setzen Sie den Wert in einem BaseController und erweitern Sie es, wo immer Sie wollen.
  2. Erstellen Sie eine Sitzungsvariable, die ihren Wert für mehrere Anforderungen beibehalten wird.

Ich werde die zweite Methode bevorzugen.

Verwandte Themen