2016-10-19 90 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