【问题标题】:Difference between Redirect::to() and View::make()Redirect::to() 和 View::make() 之间的区别
【发布时间】:2014-07-22 10:31:37
【问题描述】:

我有一个发布到控制器的刀片表单,然后控制器将在执行一些操作后重定向到相同的 URL。

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

错误异常

未定义变量:add_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);

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

【问题讨论】:

  • 你能告诉我们控制器的方法代码吗?
  • Redirect::to() 返回RedirectResponse。该类中的with() 方法将您提供给会话的数据闪烁,因此您可以尝试改用Session::get('added_items')
  • @fmgonzalez 我已经用控制器的方法代码更新了我的问题

标签: laravel laravel-routing


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

【讨论】:

  • 我把return $this->create()->with('added_items', $added_items)->with('item_list', $item_list) 作为store() 方法的返回值,所以基本上它又可以工作了。我只是想知道为什么 URL 是delivery-requests
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 2013-08-21
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
相关资源
最近更新 更多