Подтвердить что ты не робот

Laravel 4 - перенаправлять обратно на ту же страницу, где запрос поступает из

В Laravel 4 я хочу перенаправить пользователя на страницу, откуда пришел запрос. Например, пользователь пытается обновить свой профиль, поэтому редактирует профиль и удаляет SAVE. В контроллере я делаю обновление и обычно делаю Redirect::to('profile')->with('message','Profile saved!'). Но я хочу просто перенаправить его обратно с сообщением. Может быть что-то вроде Redirect::back()->with('message','Operation Successful !'), если это доступно. Я хочу, чтобы он был более общим, и я могу использовать его где угодно.

4b9b3361

Ответ 1

Да, это доступно:

return Redirect::back()->with('message','Operation Successful !');

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

echo Session::get('message');

Ответ 2

Короче: Да

Вы можете использовать

Redirect::back()->withMessage('Profile saved!')

вместо

Redirect::to('profile')->withMessage('Profile saved!')

* отличная функция в Laravel, которая анализирует ваш camelCase на ->with('name', 'value'), так что ->withName('value') работает точно так же.

Также....

Я предполагаю, что ваша форма привязана к модели, такой как Form::model($user, [...], чтобы предварительно заполнить поля формы, но если нет, вы можете захотеть повторно заново ввести вход в перенаправление (или если ваша проверка не удалась и вы хотите чтобы пользователь мог исправить недопустимую информацию).

Только фрагмент [untested]...

// [[... validation and other magic here]]

if ($validator->fails()) {
    return Redirect::back()
        ->withMessage($message_fail)
        ->withErrors($validator)
        ->withInput();
}

return Redirect::back()
        ->withMessage($message_success)

Надеюсь, что это поможет!

Twitter: @ErikOnTheWeb

Ответ 3

Вы должны не использовать Redirect::back(). Да, это заманчиво и, похоже, именно то, что вам нужно. Но:

Метод back() использует атрибут "referer" заголовка запроса. Таким образом, пользовательский агент, обычно браузер, сообщает серверу (и Laravel) URL-адрес, с которого он приходит. (так как Wikipedia говорит: referer - это орфографическая ошибка реферера) Но не каждый пользовательский агент/браузер предоставит эту информацию! Я использую Opera, и я не разрешаю ей передавать референта в целом! Поэтому back() не будет работать для меня. (Да, я могу разрешить это для сайта, но я способен лениться. И, к сожалению, я не доверяю вашему сайту.)