Ответ 1
Try
return Redirect::back()->withErrors(['msg', 'The Message']);
и внутри вашего вида вызывают это
@if($errors->any())
<h4>{{$errors->first()}}</h4>
@endif
Я пытаюсь перенаправить на предыдущую страницу с сообщением, когда есть фатальная ошибка.
App::fatal(function($exception)
{
return Redirect::back()->with('msg', 'The Message');
}
В представлении пытается получить доступ к MSG с
Sessions::get('msg')
Но ничего не получается, я что-то здесь не так делаю?
Try
return Redirect::back()->withErrors(['msg', 'The Message']);
и внутри вашего вида вызывают это
@if($errors->any())
<h4>{{$errors->first()}}</h4>
@endif
Laravel 5
контроллер
return redirect()->back()->with('success', ['your message,here']);
клинка:
@if (\Session::has('success'))
<div class="alert alert-success">
<ul>
<li>{!! \Session::get('success') !!}</li>
</ul>
</div>
@endif
Альтернативный подход будет
контроллер
Session::flash('message', "Special message goes here");
return Redirect::back();
Вид
@if (Session::has('message'))
<div class="alert alert-info">{{ Session::get('message') }}</div>
@endif
В Laravel 5.4 для меня работало следующее:
return back()->withErrors(['field_name' => ['Your custom message here.']]);
У вас есть ошибка (орфографическая ошибка):
Sessions::get('msg')// an extra 's' on end
Должно быть:
Session::get('msg')
Я думаю, теперь это должно сработать, это для меня.
Просто установите флеш-сообщение и переадресовывайте обратно с функциональности вашего контроллера.
session()->flash('msg', 'Successfully done the operation.');
return redirect()->back();
И затем вы можете получить сообщение в файле лезвия просмотра.
{!! Session::has('msg') ? Session::get("msg") : '' !!}
В Laravel 5.5:
return back()->withErrors($arrayWithErrors);
В представлении, используя Blade:
@if($errors->has())
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
Я перестал писать это сам для laravel в пользу пакета Laracasts, который обрабатывает все это для вас. Он очень прост в использовании и сохраняет ваш код в чистоте. Существует даже laracast, в котором описывается, как его использовать. Все, что вам нужно сделать:
Потяните пакет через композитор.
"require": {
"laracasts/flash": "~1.0"
}
Включите поставщика услуг в app/config/app.php.
'providers' => [
'Laracasts\Flash\FlashServiceProvider'
];
Добавьте псевдоним фасада к этому же файлу внизу:
'aliases' => [
'Flash' => 'Laracasts\Flash\Flash'
];
Потяните HTML в представление:
@include('flash::message')
Рядом с сообщением находится кнопка закрытия. Это зависит от jQuery, поэтому убедитесь, что он добавлен до вашего загрузочного файла.
дополнительные изменения:
Если вы не используете bootstrap или хотите пропустить включение флеш-сообщения и написать код самостоятельно:
@if (Session::has('flash_notification.message'))
<div class="{{ Session::get('flash_notification.level') }}">
{{ Session::get('flash_notification.message') }}
</div>
@endif
Если вы хотите просмотреть HTML-код, набранный @include('flash::message')
, вы можете найти его в vendor/laracasts/flash/src/views/message.blade.php
.
Если вам нужно изменить частичные действия:
php artisan view:publish laracasts/flash
Представления двух пакетов теперь будут расположены в каталоге `app/views/packages/laracasts/flash/'.
Я столкнулся с той же проблемой, и это сработало.
контроллер
return Redirect::back()->withInput()->withErrors(array('user_name' => $message));
Вид
<div>{{{ $errors->first('user_name') }}}</div>
Пробуя некоторые из предоставленных ответов в Laravel 5.6. *, Стало ясно, что были некоторые улучшения, которые я собираюсь опубликовать здесь, чтобы упростить задачу тем, кто не может найти решение с остальными ответами.
ШАГ 1:Перейдите в свой файл контроллера и добавьте его перед классом:
use Illuminate\Support\Facades\Redirect;
ШАГ 2: Добавьте это туда, где вы хотите вернуть перенаправление.
return Redirect()->back()->with(['message' => 'The Message']);
ШАГ 3: Перейдите к файлу блейда и измените его следующим образом
@if (Session::has('message'))
<div class="alert alert-error>{{Session::get('message')}}</div>
@endif
Тогда проверь и поблагодари меня позже.
Это должно работать с laravel 5.6. * И, возможно, 5.7. *
Для Laravel 3
Просто голова в ответ на @giannis christofakis; для тех, кто использует Laravel 3, замените
return Redirect::back()->withErrors(['msg', 'The Message']);
с:
return Redirect::back()->with_errors(['msg', 'The Message']);
Ларавел 5.6. *
контроллер
if(true) {
$msg = [
'message' => 'Some Message!',
];
return redirect()->route('home')->with($msg);
} else {
$msg = [
'error' => 'Some error!',
];
return redirect()->route('welcome')->with($msg);
}
Шаблон лезвия
@if (Session::has('message'))
<div class="alert alert-success" role="alert">
{{Session::get('message')}}
</div>
@elseif (Session::has('error'))
<div class="alert alert-warning" role="alert">
{{Session::get('error')}}
</div>
@endif
Enyoj
Для Laravel 5. 5+
Контроллер:
return redirect()->back()->with('success', 'your message here');
клинка:
@if (Session::has('success'))
<div class="alert alert-success">
<ul>
<li>{{ Session::get('success') }}</li>
</ul>
</div>
@endif
в контроллере
Например,
return redirect('login')->with('message',$message);
в блейд файле Сообщение будет храниться в сеансе, а не в переменной.
Например,
@if(session('message'))
{{ session('message') }}
@endif
В laravel 5.8 вы можете делать следующее:
return redirect()->back()->withErrors(['name' => 'The name is required']);
и в клинке:
@error('name')
<p>{{ $message }}</p>
@enderror
Я получил это сообщение, когда попытался перенаправить, как:
public function validateLogin(LoginRequest $request){
//
return redirect()->route('sesion.iniciar')
->withErrors($request)
->withInput();
Когда правильный путь:
public function validateLogin(LoginRequest $request){
//
return redirect()->route('sesion.iniciar')
->withErrors($request->messages())
->withInput();
Ларавел 5.8
Контроллер
return back()->with('error', 'Incorrect username or password.');
клинка
@if (Session::has('error'))
<div class="alert alert-warning" role="alert">
{{Session::get('error')}}
</div>
@endif