2017-05-31 4 views
1

J'ai un formulaire de recherche, mais il n'affiche pas les options sélectionnées précédemment lorsqu'il est soumis.Le formulaire de recherche n'affiche pas les anciennes valeurs après la soumission de laravel 5.3

Voici ma forme:

<form role="form" class="advanced-search-form" method="post" action="{{ url('/searchresults') }}"> 
    {{ csrf_field() }} 
    <div class="row"> 
    <div class="col-md-4 form-group"> 
     <label for="exampleSelect1">Select city: </label> 
     <select class="form-control" id="exampleSelect1" name="selectcity"> 
      @if (count($cities) > 0) 
       @foreach ($cities as $city) 
        <option value="{{$city->id}}" @if(old('selectcity') == $city->id) selected="selected" @endif>{{$city->name}}</option> 
       @endforeach 
      @endif 
     </select> 
    </div> 

    <div class="row"> 
     <div class="form-group col-md-4 col-md-offset-8"> 
      <button class="btn btn-light-blue-2 pull-right" type="submit">Search</button> 
     </div> 
    </div> 
</form> 

Voici mon itinéraire:Route::post('/searchresults', '[email protected]');

L'action dans mon contrôleur

public function index() 
 
{ 
 
     
 
    $cities = DB::table('cities') 
 
     ->select('cities.name', 'cities.id') 
 
     ->orderBy('name', 'ASC') 
 
     ->get(); 
 
    return view('pages.searchresults', compact('cities')); 
 
}

Pour le moment je n'affiche pas les résultats, je dois d'abord corriger pourquoi le formulaire se vide après soumettre, et ne retourne pas les anciennes valeurs et définit l'option sélectionnée.

+2

sur les méthodes ne rediriger post au lieu de vue de retour. –

+0

Tout d'abord: lorsque vous travaillez avec des formulaires et que vous souhaitez les remplir, vous devriez vraiment consulter https://laravelcollective.com/docs/5.0/html. Deuxièmement - y a-t-il une raison pour laquelle vous n'utilisez pas un modèle pour City au lieu de faire des requêtes brutes? Troisièmement - pour rediriger vers le formulaire et conserver les données, vous pouvez utiliser redirect() -> back() -> withData() et aussi -> avec (compact ('cities') – larsemil

+0

['old()'] (https://laravel.com/docs/5.4/helpers#method-old) ne fonctionne que lorsque vous affichez les anciennes données d'entrée dans votre session, comme indiqué. Si vous voulez vous souvenir de ces données, vous devrez le faire clignoter manuellement ou renvoyer la valeur sélectionnée à votre page. – Jerodev

Répondre

2

Comme il est écrit dans les documentations https://laravel.com/docs/5.3/requests

La méthode flash sur le Illuminate \ Http \ classe Request clignote l'entrée en cours à la session afin qu'il soit disponible lors de la demande suivante de l'utilisateur à l'application:

$request->flash(); 

Vous devez utiliser une redirection comme

return redirect('yourTarget')->withInput();