lozadaOmr
lozadaOmr

Reputation: 2655

Difference between Redirect::to() and View::make()

I have a blade form that posts to Controller, the controller then will redirect to the same URL after performing some operations.

Before redirecting to the user, two variables will be passed. My problem is that when using Redirect::to() only the ->with('item_list',$item_list) is made available for the view, while ->with('added_items',$added_items) when using the $added_items variable in the view gives me the error:

ErrorException

Undefined variable: added_items (View: /var/www/mw/app/views/delivery-> requests/create.blade.php)

Controller

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);
        }

The reason I used Redirect::to() is that it maintains the same URL which is /delivery-requests/create

But when I use View::make() I can access the $added_items variable just fine, but the URL now becomes /delivery-requests , even if I explicitly put it like this:

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

My question is why can't Redirect::to() read the $added_items variable on the view

Upvotes: 0

Views: 1559

Answers (1)

user1669496
user1669496

Reputation: 33078

Instead of redirecting to the route, return the method which is at the end of that route with any additional variables you need.

return $this->create()->with('added_items', $added_items)->with('item_list', $item_list) where create() is the method which is being used on the route delivery-requests/create.

Redirect is probably what you are actually after then,

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

Upvotes: 1

Related Questions