簡體   English   中英

Laravel在幾個控制器之間共享數據

[英]Laravel share data between few controllers

我有商店站點。 我想與我的模型訂單中的最后一個orderId共享OrderController和PanelCotroller數據。 這是我的代碼:

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。 當我從Order創建對象時,我的函數getOrderId將返回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;

}

}

這是我的PanelController。

PanelController類擴展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');
    }
}

如何對所有控制器可見我的變量orderId或方法getOrderId?

您可以通過兩種方式在其他控制器中獲取值:

  1. BaseController設置值,然后將其擴展到所需的位置。
  2. 創建一個Session變量,該變量將在多個請求中保持其值。

我更喜歡第二種方法。

創建訂單后,將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!');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM