Laravel 5 возвращает вид, а затем перенаправляет после

Итак, у меня есть эта функция, как мне заставить ее возвращать 2 представления по прошествии времени?

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class emailverified extends Controller
{
  public  function emailverified()
    {
        return view('auth.email.emailverified');
        sleep(3);
        return redirect()->away('https://www.xxx.xxx');
    }
}

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


person Tera    schedule 23.11.2017    source источник
comment
вы можете добавить перенаправление в первое представление, которое приведет пользователя ко второму представлению.   -  person Bhaumik Pandhi    schedule 23.11.2017
comment
@Tera Как вы ожидаете, что sleep(3) будет выполняться, когда вы раньше return исходили из сценария ?.   -  person ako    schedule 23.11.2017
comment
@ako Я ожидаю, что он покажет вид, подождите 3 секунды и вперед (это вид, в котором говорится, что вы будете перенаправлены через 3 секунды,   -  person Tera    schedule 24.11.2017


Ответы (4)


Попробуйте использовать javascript внутри функции вашего контроллера

class emailverified extends Controller
{
  public  function emailverified()
    {
        echo "<script>setTimeout(function(){ window.location.href = 'https://www.xxx.xxx'; }, 3000);</script>";
        return view('auth.email.emailverified');

    }
}
person Niklesh Raut    schedule 23.11.2017

Кажется, вы пытаетесь показать ответ для пользователя и перенаправить на другую страницу в определенном временном интервале, то, что вы пробовали, неверно, как только вы закодируете оператор возврата в функции, скрипт не будет далее выполняться, а ваш оператор для редирект работать не будет ..

Лучшее решение - вернуть ответ как ответ ajax, и вы можете легко выполнить оба действия в peralal,

$response = [      
    "ViewBag" =>   view('auth.email.emailverified')->render(),
    'URLTOREDIRECT' => 'https://www.xxx.xxx',
];
return response()->json($response);

Привяжите следующее событие к кнопке или привязке, где вы хотите, чтобы произошел вызов ajax, или если отправка формы

$("#yourButtonId").live("click",function(event) {
           var url = '{!!  url("/your/path") !!}';
            $.ajax({
                type: "post",  //depending on your route is get or post
                url: url,
                data: $("#yourformid").serialize()+'&data1='+$('#data1').val()+'&data2='+$('#data2').val()',
                dataType : "json",
                beforeSend:   function(){
                    alert('loading'); //or your can show a user friendly loader
                }
            }).done(function(data) {

                $("#yourDivId").html(data.ViewBag);
                var delay = 1000;  //millisecond
                setTimeout(function(){ window.location = data.URLTOREDIRECT; }, delay);



            }).fail(function(data) {

                if(data.responseJSON){
                    var errors = data.responseJSON;

                    errorsHtml = '<ul>';
                    $.each( errors , function( key, value ) {
                        errorsHtml += '<li>' + value[0] + '</li>';
                    });

                    errorsHtml += '</ul>';

                  alert(errorsHtml);

                }else{
                    alert(data.responseText);
                }

            });

            event.preventDefault();
        });
person Akram Wahid    schedule 23.11.2017

Вместо того, чтобы возвращать представление, вы можете попробовать echo view('your view').

На этом этапе код не должен выходить

затем добавьте код сна и перенаправьте, он должен работать, я только что проверил его

person kofoworola    schedule 23.11.2017

person    schedule
comment
Просто и элегантно;) - person Eduardo Ramos; 14.06.2021