Как передать значение от одного контроллера к другому контроллеру в 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); для передачи сообщения, но это не работает так, как это работает с формами в представлениях.
Как правильно это сделать ?
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