Laravel 5返回视图然后重定向

时间:2017-11-23 06:59:52

标签: php laravel laravel-5 laravel-5.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');
    }
}

它只选择了一条或另一条路径。在睡眠定时器返回另一个视图后,如何让它返回视图?

4 个答案:

答案 0 :(得分:0)

尝试在控制器功能中使用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');

    }
}

答案 1 :(得分:0)

它似乎是你试图为用户显示响应并在某个时间间隔内重定向到另一个页面,你尝试的是错误的,一旦你的代码在函数中返回语句,脚本就不会被进一步执行了你的重定向声明不起作用..

最佳解决方案是,将响应作为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();
        });

答案 2 :(得分:0)

您可以使用header refresh

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class emailverified extends Controller
{
  public  function emailverified()
    {
        return view('auth.email.emailverified')->withHeaders(['refresh' => '3;url=https://www.xxx.xxx']);
    }
}

答案 3 :(得分:-1)

您可以尝试echo view('your view')

,而不是返回视图

此时代码不应该退出

然后添加你的睡眠代码和重定向,它应该工作我只是测试它