【问题标题】:Passing variables between functions in laravellaravel 函数之间传递变量
【发布时间】:2017-03-01 09:39:45
【问题描述】:

我想我只是在查看它,但我无法将变量显示在我的视图中。

在同一个控制器中我调用一个函数,从那里我返回一个包含变量的数组(也是数组)。从我最初启动的函数中,我将变量发送到视图。

但是,在视图中我收到一条错误消息,指出变量未定义。

我需要的信息在数组 $items 和数组 $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>

【问题讨论】:

  • 当您var_dump 将数组发送到视图而不是显示视图时,您会得到什么?数据显示了吗?
  • @TurgutSarıçam 在视图中我收到 Laravel 生成的错误消息:未定义变量:trans(视图:确认视图的路径)所以我永远不会得到 var_dump 结果。但是,我首先在 $order_id 上执行 var_dump 并且不会返回错误。这是导致错误的第二个 var_dump(包含 trans)。

标签: php arrays laravel laravel-5


【解决方案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');
    }
}

希望这会有所帮助...

【讨论】:

  • 我可以这样访问 $trans 吗?由于上面只有几行,我将它们添加到发送到视图的数据数组中。但错误一定在于我如何尝试获取这些变量。
  • 您是如何尝试获取这些变量的?您可以使用查看代码编辑您的帖子吗?
  • 我已经添加了使用变量的视图代码。
  • 我编辑了代码。试试这个新的。现在我正确理解了你想要做什么。检查它是否有效...
猜你喜欢
  • 1970-01-01
  • 2020-07-02
  • 2013-04-09
  • 2013-03-07
  • 1970-01-01
  • 2019-09-12
  • 1970-01-01
相关资源
最近更新 更多