SweetAlert: предупреждение появляется дважды

У меня есть проект Laravel. Я храню некоторые данные в своей базе данных и создаю уведомление:

public function store(CreateProjectFormRequest $request, Project $project)
   {
        $project = $request->user()->projects()->create([
            'title' => $request->input('title'),
            'description' => $request->input('description'),
            'introduction' => $request->input('introduction'),
            'city_id' => $request->input('city_id')
        ]);

         notify()->flash('Publié !', 'success', [
            'text' => 'Votre projet a était publié avec succés !',
            'timer' => 2000,
        ]);

         return view('projects.show')->withProject($project)->withProgress(56);
   }

Предупреждение появляется, когда пользователи перенаправляются в представление Projects.show. Но, когда они переходят на другую страницу, предупреждение появляется снова.

Этот вид расширяет мой макет. Этот макет содержит эту часть скрипта:

<script>
    @if (notify()->ready())
        swal({
            title: "{!! notify()->message() !!}",
            text: "{!! notify()->option('text') !!}",
            type: "{{ notify()->type() }}",
            @if (notify()->option('timer'))
                timer: "{{ notify()->option('timer') }}",
            @endif
        });
    @endif    
</script> 

Пожалуйста, помогите мне исправить это, мне просто нужно это предупреждение один раз. Благодарю вас !

РЕДАКТИРОВАНИЕ: Я понял! Я загружаю представление вместо перенаправления на маршрут! Juste нужно отредактировать это:

return view('projects.show')->withProject($project)->withProgress(56);

to

return redirect()->route('projects.show')->withProject($project)->withProgress(56);

person DadaArno    schedule 01.06.2016    source источник
comment
Не подлежит сомнению, но я думаю, что правильным сообщением должно быть Votre projet a ÉTÉ publié avec succès.   -  person Amarnasan    schedule 01.06.2016
comment
О.... Спасибо xD!   -  person DadaArno    schedule 01.06.2016


Ответы (1)


Проблема в том, что вы создаете вспышку, а затем создаете представление. Таким образом, у вас будет flash для этого запроса и следующего.

Когда вы высвечиваете сообщение, оно остается до конца следующего запроса. Если вы создаете представление (вместо перенаправления), вы не создаете новый запрос, а фактически «завершаете» текущий. Запрос, который "сбросит" флеш, все равно будет следующим. Что вам нужно сделать, так это завершить этот запрос и запустить другой, создав перенаправление.

Итак, вы хотите перенаправить после создания флэш-памяти, верно?

return Redirect::action('YourController@yourFunction')->withProject($project)->withProgress(56);

Источник: https://laravel.com/docs/5.1/session#flash-data

person Amarnasan    schedule 01.06.2016