Donc, j'ai cette fonction, comment puis-je faire en sorte qu'elle renvoie 2 vues après le temps passé?

<?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');
    }
}

Il ne choisit que l'un ou l'autre chemin. Comment puis-je le faire revenir à la vue après le retour de la minuterie de mise en veille à une autre vue?

1
Tera 23 nov. 2017 à 09:59

4 réponses

Meilleure réponse

Essayez d'utiliser javascript dans la fonction de votre contrôleur

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');

    }
}
0
Niklesh Raut 23 nov. 2017 à 07:32

Au lieu de renvoyer la vue, vous pouvez essayer echo view('your view').

Le code ne doit pas être quitté à ce stade

Puis ajoutez votre code de sommeil et redirigez, cela devrait fonctionner je viens de le tester

-1
kofoworola 23 nov. 2017 à 07:01

Vous pouvez utiliser actualisation de l'en-tête

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']);
    }
}
0
Guja1501 23 nov. 2017 à 09:09

Il semble que vous essayez d'afficher une réponse pour l'utilisateur et de rediriger vers une autre page dans un certain intervalle de temps, ce que vous avez essayé est faux, une fois que vous avez codé l'instruction de retour dans une fonction, le script ne sera plus exécuté et votre instruction pour la redirection ne fonctionnera pas.

La meilleure solution est de renvoyer la réponse en tant que réponse ajax, et vous pouvez facilement effectuer les deux actions en peralal,

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

Liez l'événement suivant au bouton ou à l'ancre où vous voulez que l'appel ajax se produise ou si une soumission de formulaire

$("#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();
        });
1
Akram Wahid 23 nov. 2017 à 07:43
47449373