2016-06-13 2 views
3

J'ai un problème. Je construis une application avec Laravel et sur la page où je télécharge l'image j'ai besoin d'un message de succès instantané qui indique que vous avez téléchargé avec succès la nouvelle image. Lorsque je télécharge, cela fonctionne, montre le message flash, mais quand je me rafraîchis, ou je vais à l'autre page, le message reste toujours là. Et puis après un autre rafraîchissement, il disparaît. Sur d'autres pages comme la création d'un nouveau message, le message flash fonctionne correctement sans afficher après l'actualisation ou aller à une autre page. J'utilise imageintervention.io api pour télécharger l'image, je le mentionne parce que je ne veux pas que vous soyez confondu avec le code.Laravel message flash montrant après rafraîchissement

public function update_avatar(Request $request) 
{ 
    // Handle the upload of avatar 
    if ($request->hasFile('avatar')) 
    { 
     $avatar = $request->file('avatar'); 
     $filename = time() . '.' . $avatar->getClientOriginalExtension(); 

     Image::make($avatar)->resize(300, 300)->save(public_path('/uploads/avatars/' . $filename)); 

     $user = Auth::user(); 
     $user->avatar = $filename; 
     $user->save(); 

     Session::flash('success', 'You have successfully uploaded new picture!');  


    } 

    return view('pages.profile', array('user' => Auth::user())); 

} 

Répondre

8

Vous ne devriez pas retourner une vue après l'action que vous faites comme ça. Vous devriez retourner une redirection vers une route GET où vous allez afficher cette vue à la place (view - pages.profile). C'est le flux POST de redirection GET.

Les données clignotantes sont uniquement disponibles dans la requête NEXT. Vous êtes en train de clignoter dans la même requête que vous affichez une vue. C'est pourquoi l'actualisation affiche le message flash, car l'actualisation provoque une nouvelle requête, qui est la requête suivante.

Vous ne devriez vraiment pas avoir une seule méthode de traitement des formulaires et d'affichage des vues, car cela entraînera de la confusion sur la route. Avoir une méthode qui effectue le traitement qui redirige vers un itinéraire qui affiche votre vue. Vous pouvez flasher et rediriger en même temps.

return redirect()->route(...)->with('success', ....); 
+0

Merci, je considérerai cela dans le futur. :) – user6106183