2016-10-19 152 views
0

我想我只是看着它,但我不能讓我的變量我的看法。laravel函數之間傳遞變量

在同一個控制器中,我調用一個函數,從那裏返回一個包含變量(也是數組)的數組。從最初開始的函數內部,我將變量發送到視圖。

但是,在視圖中,我得到一個錯誤,說變量是未定義的。

我需要的信息是數組$ trans和array $ trans。這些需要進入功能確認並最終進入確認視圖。

兩個功能(我試圖刪除具有無關的問題,大多數代碼):

public function confirmation($order_id){ 
$order = Orders::findOrFail($order_id); 
if(isset($order->transaction_id)){ 
    $data = []; 
    $data['order_id'] = $order->order_reference; 
    $data['trans'] = $order->dat['tr']; 
    $data['items'] = $order->dat['it']; 
    return view('confirmation', $data); 
}else{ 
     //Nothing relevant 
    } 
} 

public function sendpicqer($order_id){ 
$order = Orders::with(['orderDetails', 'orderAddress', 'customer'])->where('order_id', $order_id)->first(); 
$order_details = OrderDetails::where('order_id', $order_id)->get(); 

$error = $order_id; 

$result = $this->picqer->addCustomer($customer); 

if(!isset($result['data'])){ 
    $error = $result; 
    if(is_array($result)){ 
     $error = json_encode($result); 
    } 
    return redirect()->route('cancel'); 
    } 
    $orderData = [ 
     'idcustomer' => $result['data']['idcustomer'] 
    ]; 

    $orderData['products'] = []; 
    $items = []; 
    foreach($order_details as $od){ 
     $pid = $od->product_id; 
     switch ($pid) { 
      case 1: 
       $pid = 2399983; 
       break; 
      case 2: 
       $pid = 2399990; 
       break; 
     } 
     $orderData['products'][] = [ 
      'idproduct' => $pid, 
      'amount' => $od->quantity 
     ]; 
     $items[] = [ 
      'sku' => $pid, 
      'name' => $od->product_id->product_name, 
      'price' => $od->product_id->product_price, 
      'quantity' => $od->quantity 
     ]; 
    } 
    $result = $this->picqer->addOrder($orderData); 
    if(isset($result['data'])){ 
     //Succeeded! 
     $idorder = $result['data']['idorder']; 
     $orderid = $result['data']['orderid']; 

     $trans = array('id' => $orderid, 'affiliation' => 'Matt Sleeps', 'revenue' => $order->total_price); 

     $dat = []; 
     $dat['tr'] = $trans; 
     $dat['it'] = $items; 

     return $dat; 

     $result2 = $this->picqer->sendRequest('/orders/'.$idorder.'/process', null, 'POST'); 
     if(!isset($result2['data'])){ 
      $error = $result2; 
      if(is_array($result2)){ 
       $error = json_encode($result2); 
      } 
      return redirect()->route('cancel'); 
     } 
    }else{ 
     $error = $result; 
     if(is_array($result)){ 
      $error = json_encode($result); 
     } 
     return redirect()->route('cancel'); 
    } 

    //Order is successfully confirmed and send to Picqer! 
    $error = '(Both to the customer and with Picqer)'; 

} 

這是考慮到部分,我需要訪問的變量:

<?php 
var_dump($order_id); 
var_dump($trans); 
var_dump($items); 


// Function to return the JavaScript representation of a TransactionData object. 
function getTransactionJs(&$trans) { 
    return <<<HTML 
ga('ecommerce:addTransaction', { 
    'id': '{$trans['id']}', 
    'affiliation': '{$trans['affiliation']}', 
    'revenue': '{$trans['revenue']}' 
}); 
HTML; 
} 

// Function to return the JavaScript representation of an ItemData object. 
function getItemJs(&$transId, &$item) { 
     return <<<HTML 
    ga('ecommerce:addItem', { 
     'id': '$transId', 
     'name': '{$item['name']}', 
     'sku' : '{$item['sku']}', 
     'price': '{$item['price']}', 
     'quantity': '{$item['quantity']}' 
    }); 
    HTML; 
    } 

?> 

<script> 

<?php 
echo getTransactionJs($trans); 

foreach ($items as &$item) { 
    echo getItemJs($trans['id'], $item); 
} 
?> 

ga('ecommerce:send'); 
</script> 
+0

你明白了什麼,當你'var_dump'您發送到視圖而不是顯示視圖的陣列?數據是否顯示? –

+0

@TurgutSarıçam在視圖中我得到一個Laravel生成的錯誤消息說:未定義的變量:trans(查看:確認視圖的路徑) 所以我從來沒有得到var_dump結果。但是,我首先在$ order_id上做了一個var_dump,並且沒有返回錯誤。它是導致錯誤的第二個var_dump(包含trans)。 – Maarten

回答

1

您必須將變量發送到視圖。你可以更改代碼以這樣的事:

//Return the view via confirmation function. 
public function sendpicqer($order_id){ 
    ... 
    return $this->confirmation($order_id, $items, $trans); 
} 


public function confirmation($order_id, $items, $trans){ 
    $order = Orders::findOrFail($order_id); 
    if(isset($order->transaction_id)){ 
     $data = []; 
     $data['order_id'] = $order->order_reference; 
     $data['trans'] = $trans; 
     $data['items'] = $items; 

     //Send the variables to the view 
     return view('confirmation', $data); 
    }else{ 
     return redirect()->route('cancel'); 
    } 
} 

希望這有助於...

+0

我可以以這種方式訪問​​$ trans嗎?由於上面只有幾行,我將它們添加到發送到視圖的數據數組中。但是,錯誤必須是我如何獲得這些變量。 – Maarten

+0

你如何獲得這些變量?你能用視圖代碼編輯你的文章嗎? – Laerte

+0

我已經添加了使用變量的視圖代碼。 – Maarten