How to pass a value from one controller to another controller in laravel

Refresh

December 2018

Views

4.2k time

2

I am struggling with passing a variable from one controller method to another in laravel.

When user creates a product, I want to let him now the result.

Problem is that after Create method is executed, a message should be passed to one more controller before it goes to the view.

I am trying to pass a success or failure message from postCreate method to getList method.

Create method:

    public function postCreate() {
      if(validation passes){
          //create product
          return Redirect::to('admin/products/list/'.$current_section_id)
            ->with('message', 'New Product Created');
         }
      else{
           return Redirect::to('admin/products/new)
            ->with('message', 'Something went wrong');
         }

}

getList method returns a user to the page he was before (current_section_id) and list products

public function getList($id){
        $message = Input::get('message');

        return View::make('products.list')
            ->with('current_section_id', $id)
            ->with('message', $message);
    }

I have tried to use ->with('message', $message); to pass a message but it does not work like it works with forms in views.

What is the right way to do it ?

2 answers

1

Когда вы сделаете это:

return Redirect::to('admin/products/list/'.$current_section_id)
            ->with('message', 'New Product Created');

«С» метод такой же, как:

\Session::flash('message', 'New Product Created');

Так что на GetList (), вы можете получить его с помощью:

$message = session('message');

Но это не было бы необходимо, поскольку сессия не закончилась, и он будет доступен для любого метода управления делает вид и закрывает сессию. Вы можете просто сделать:

    public function getList($id){
            $message = Input::get('message');

            return View::make('products.list')
  ->with('current_section_id', $id);
        }

И Ваше мнение будет иметь доступ к сессии, используя любой метод, который вы хотите, как:

session('message')
4

Использование с () на вид добавляет данные, которые передаются по мнению в одном запросе HTTP. Тем не менее, вы делаете редирект и создавая таким образом новый запрос, и так с () работает по-другому.

Для того, чтобы передавать данные между HTTP-запросов, вам нужно будет либо присоединить его к URL (вероятно, не очень хорошая идея) или хранить его в сессии (намного лучше), что обращение сессии Laravel поддерживает очень аккуратно, позволяя прошивать данные, то есть поместить его в сессии только для следующего запроса HTTP (который с () на редирект делает для вас), а затем заботится о чистке его).

Вы можете увидеть больше об этом в документации Laravel . Тем не менее, это означает , что вы должны идти искать данные в массиве сеанса, а не ожидая , что будет введен в поле зрения автоматически.