2015-11-24 6 views
6

Stellen Sie sich vor, Sie haben eine Methode im Controller, wie das Speichern einer neuen Firma. Stellen Sie sich auch vor, wir können neue Unternehmen auf verschiedenen Seiten unserer Website erstellen. Zum Beispiel kann ich eine Firma von 2-3 Seiten erstellen.Umleiten zu verschiedenen Seiten basierend auf der vorherigen Seite in Laravel

Je nachdem, wo ich die Firma erstellt habe, muss ich verschiedene Weiterleitungen haben. Manchmal muss ich zurück und manchmal auf andere Routen umleiten.

Etwas wie:

if ($previousRoute === 'companies.index') { 
    return redirect()->back(); 
} else { 
    return redirect()->route('someroute'); 
} 

Ich glaube, ich nicht die Routennamen bekommen kann überall dort Benutzer herkam. Wenn ich die Referrer-URL überprüfe, dann werde ich für den Fall, dass ich die Routen-URL ändere, alles kaputt machen, so dass ich stattdessen auf Routennamen angewiesen bin. Plus, die Lösung mit vielen "Wenn-s" oder "Schalter" ist irgendwie komisch, es wird den Code verschmutzen.

Auch Wildcard-Unterstützung ist erforderlich. Eine Art von Routemap mit Weiterleitungen oder so ähnlich.

Irgendwelche Ratschläge, wie man das umsetzt?

+1

Da ich vermute, dass Sie POST auf die Controller-Aktion sind, warum können Sie nicht einfach einen Wert übergeben, der angibt, ob Sie zurückgeleitet werden sollten oder nicht? Und Sie können diesen Wert einfach in die benötigten Formulare aufnehmen (da Sie gesagt haben, dass Sie 2-3 Seiten haben, die das tun, nehme ich an, dass Sie die Formulare für jedes Formular anpassen können, wie es Ihnen passt). Der Ansatz, den Sie suchen, hat keine zuverlässigen Lösungen und ist übermäßig kompliziert. – Bogdan

+0

Tolle Lösung. Die einzige Sache ist, gerade habe ich ein modales Fenster mit Form. Ich zeige das Modal, wenn ich auf verschiedene Schaltflächen klicke und je nachdem, wo ich geklickt habe, muss ich den Benutzer auf verschiedene Seiten umleiten. Also habe ich 3 Dateien erstellt: form.blade.php, modal1.blade.php und modal2.blade.php. Ich füge Form in diese Modale und übergebe sie redirect_to param, und innerhalb Form legte ich versteckte Eingabe mit diesem Parameter – Victor

Antwort

0

Nun, Sie können die vorherige URL mit der URL einer beliebigen Route vergleichen. Es ist nicht die beste Lösung und ich weiß nicht, was ich mit den Routenparametern machen soll, aber es kann funktionieren.

if (URL::previous() === URL::route('companies.index')) { 
    return redirect()->back(); 
} else { 
    return redirect()->route('someroute'); 
} 
+0

Ich würde bei diesem bleiben, aber ich mag Bogdans Lösung auch – Victor

0

Eine Reihe von if Aussagen (oder einem switch) wird irgendwo nötig sein, da Sie eine Entscheidung treffen müssen.

Ich würde nicht auf die Referrer URL verlassen, da es bricht, wenn Sie Ihre Routen ändern. Wie du, bevorzuge ich Routennamen für alles, da sich meine URLs ändern können.

Wie wäre es mit einem Sitzungsschlüssel? Legen Sie einen Wert fest, und rufen Sie ihn ab. & Wählen Sie Ihre Weiterleitung, nachdem die Firma erstellt wurde. Etwas wie folgt aus:

In der Controller-Methode für Unternehmen Seite # 1

Session::put('create-company-method', 1); 

Dann erstellen, nachdem das Unternehmen

$flag = Session::get('create-company-method'); 
if ($flag===1) { 
    return redirect()->route('go-here-next'); 
} else if ($flag===2) { 
    ... 
} 

erstellt Es ist nicht schön, aber es wird den Trick. Außerdem hat es einen großen Vorteil: Sie können die Sitzungswerte beliebig ändern. Wenn Sie also zusätzliche Informationen hinzufügen müssen, um die Entscheidung zu treffen, sollten Sie fortfahren. Sie benötigen Platzhalter? Stellen Sie den Sitzungsschlüssel so ein, wie Sie möchten.

+0

Speichern von Werten in einer Sitzung ist genauso unzuverlässig wie die Verwendung der übergebenen Referrer, da ein Benutzer mehrere Tabs im Browser geöffnet haben kann, alle teilen sich dieselbe Sitzung. So wie der Referrer gefälscht oder vermisst werden kann, können Sie nicht sicher sein, dass die vorherige Seite den Sitzungswert festgelegt hat. – Bogdan

0

konnte ich nicht untersteht, wenn Sie eine „Logik“ haben hinter der Routing, nachdem Sie die Company speichern zurück. In einer meiner Apps musste ich in der Lage sein, eine Adresse zu bearbeiten und entweder zurück zur vorherigen URL oder zurück zur Indexseite umzuleiten.

Wenn dies in Ihrer Anwendung der Fall ist, gibt es eine ziemlich einfache und saubere Lösung für dieses Problem.

Wir sind Laravel redirect()->intented() Funktion.

In Ihrer GET Funktion (z.getCreate) können wir die intented URL zum vorherigen URL setzen, wenn es nicht die gleiche wie die URL selbst:

($request->fullUrl() != URL::previous()) ? session()->set('url.intended', URL::previous()) : null; 
// url.intended is the same key that is used be Laravels intented function 

Jetzt in Ihrem POST Methode (zB postCreate) Sie an den gewünschten URL eine Umleitung nur zurückkehren wie folgt:

return redirect()->intended('[email protected]'); 
// The string within intended() defines where you want to be redirected if there is no session key is found 
Verwandte Themen