Как передать значение от одного контроллера к другому контроллеру в laravel



Я борюсь с передачей переменной от одного метода контроллера к другому в laravel.



Когда пользователь создает продукт, я хочу, чтобы он теперь получил результат.



Проблема заключается в том, что после выполнения метода Create сообщение должно быть передано еще одному контроллеру, прежде чем оно отправится в представление.



Я пытаюсь передать сообщение об успехе или неудаче из метода postCreate в метод getList.



Метод создания:



    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 возвращает пользователя на страницу он был раньше (current_section_id) и список продуктов



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

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


Я пытался использовать ->with('message', $message); для передачи сообщения, но это не работает так, как это работает с формами в представлениях.



Как правильно это сделать ?

916   2  

2 ответов:

Использование функции with () в представлении добавляет данные к данным, переданным в представление в рамках того же http-запроса. Однако вы делаете редирект и поэтому создаете новый запрос, и поэтому с() работает по-другому.

Чтобы передать данные между http-запросами, вам нужно либо прикрепить их к url-адресу (вероятно, это не очень хорошая идея), либо сохранить их в сеансе (гораздо лучше), что очень аккуратно поддерживает обработка сеанса Laravel, позволяя вам мигать данными, то есть помещать их в сеанс только для того, чтобы они были доступны. следующий http-запрос (который с помощью () on redirect делает за вас), а затем заботится о его очистке).

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

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

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

Метод "with" такой же, как:

\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')

Comments

    Ничего не найдено.