web-dev-qa-db-fra.com

Laravel 4 - Renvoi à la même page d'où provient la demande

Dans Laravel 4, je souhaite rediriger l'utilisateur vers la page d'où provient la demande. Par exemple, un utilisateur essaie de mettre à jour son profil pour modifier le profil et cliquer sur SAVE. Dans le contrôleur I faire la mise à jour et normalement je ferais Redirect::to('profile')->with('message','Profile saved!'). Mais ce que je veux, c'est simplement le rediriger avec un message. Peut-être quelque chose comme Redirect::back()->with('message','Operation Successful !') si cela est disponible. Je le veux comme il est plus générique et je peux l'utiliser n'importe où.

30
Abhay PS

Oui c'est disponible:

return Redirect::back()->with('message','Operation Successful !');

Mais puisqu'il s'agit d'une demande redirigée, vous devez accéder au message en utilisant:

echo Session::get('message');
73

En bref: oui

Vous pouvez certainement utiliser

Redirect::back()->withMessage('Profile saved!')

au lieu de

Redirect::to('profile')->withMessage('Profile saved!')

* fonctionnalité intéressante dans Laravel le fait qu'il analyse votre camelCase sur la ->with('name', 'value') de sorte que ->withName('value') fonctionne exactement de la même manière.

Également....

Je suppose que votre formulaire est lié au modèle tel que Form::model($user, [...] pour pré-remplir les champs du formulaire, mais sinon, vous voudrez peut-être ré-afficher l’entrée sur la redirection (ou si votre validation échoue et que vous souhaitez que l’utilisateur puisse corriger les informations non valides).

Juste un extrait [non testé] ...

// [[... validation and other magic here]]

if ($validator->fails()) {
    return Redirect::back()
        ->withMessage($message_fail)
        ->withErrors($validator)
        ->withInput();
}

return Redirect::back()
        ->withMessage($message_success)

J'espère que ça t'as aidé!

Twitter: @ErikOnTheWeb

19
Erik Aybar

Vous devriez envisager de ne pas utiliser Redirect::back(). Oui, c'est tentant et semble être exactement ce dont vous avez besoin. Mais:

La méthode back() utilise l'attribut "referer" de l'en-tête de la requête. Ainsi, l'agent utilisateur, généralement un navigateur, indique au serveur (et à Laravel) l'adresse URL d'où il provient. (comme le dit Wikipedia: le référent est une faute d'orthographe du référent) Mais tous les utilisateurs/navigateurs ne fourniront pas cette information! J'utilise Opera et je ne le permets pas transmettez le referer en general! Donc back() ne fonctionnera pas pour moi. (Oui, je peux le permettre pour un site, mais je suis trop paresseux. Et pardon, je ne fais pas confiance a votre site. )

5
chris342423

Redirection vers les actions du contrôleur

return redirect()->action('HomeController@index');
0