Redirect :: to()和View :: make()之间的区别

时间:2014-06-02 10:22:21

标签: laravel laravel-routing

我有一个张贴到Controller的刀片表单,然后控制器会在执行某些操作后重定向到相同的URL。

在重定向到用户之前,将传递两个变量。我的问题是,在使用Redirect::to()时,只有->with('item_list',$item_list)可用于视图,而->with('added_items',$added_items)在视图中使用$added_items变量时会出现错误:

  

ErrorException

     

未定义的变量:added_items(查看:/ var / www / mw / app / views / delivery->   请求/ create.blade.php)

控制器

if (Input::has('addItem')) 
        {
            if (Session::has('added-items')) 
            {
                $id = Input::get('item_id');

                $new_item = Item::find($id);

                Session::push('added-items', [
                        'item_id' => $id,
                        'item_name' => $new_item->item_name,
                        'item_quantity' => Input::get('item_quantity')
                    ]);

                $array = Session::get('added-items');

                //move outside foreach loop because we don't want to reset it
                $total = array();

                foreach ($array as $key => $value) 
                {
                    $id = $value['item_id'];
                    $quantity = $value['item_quantity'];

                    if (!isset($total[$id])) 
                    {
                        $total[$id] = 0;
                    }

                    $total[$id] += $quantity;
                }

                $items = array();

                foreach($total as $item_id => $item_quantity) 
                {
                    $new_item = Item::find($item_id);
                    $items[] = array(
                        'item_id' => $item_id,
                        'item_name' => $new_item->item_name,
                        'item_quantity' => $item_quantity
                        );
                }

                Session::put('added-items', $items);
            } 
            else 
            {
                $id = Input::get('item_id');
                $new_item = Item::find($id);

                Session::put('added-items', [
                    0 => [
                    'item_id'       => $id,
                    'item_name'     => $new_item->item_name,
                    'item_quantity' => Input::get('item_quantity')
                    ]
                ]);     
            }

            // pass the items again to the page
            $item_list = Item::lists('item_name', 'id');
            $added_items = Session::get('added-items');

            return View::make('delivery-requests/create')
                    ->with('added_items',$added_items)
                    ->with('item_list', $item_list);
        }

我使用Redirect::to()的原因是它维护了相同的URL / delivery-requests / create

但是当我使用View::make()时,我可以正常访问$added_items变量,但现在URL变为/ delivery-requests,即使我明确地这样说:

return View::make('delivery-requests/create')
->with('added_items',$added_items)
->with('item_list', $item_list);

我的问题是为什么不能重定向:: to()读取视图上的$ added_items变量

1 个答案:

答案 0 :(得分:1)

不是重定向到路由,而是使用您需要的任何其他变量返回该路径末尾的方法。

return $this->create()->with('added_items', $added_items)->with('item_list', $item_list)其中create()是路线delivery-requests/create上使用的方法。

重定向可能就是你之后的实际情况,

Redirect::to()->with('item_list', $item_list);