Récupérer une variable par Get laravel 5.2

Par khomalli, il y a 10 ans


Bonjour,

Je n'arrive pas a récupérer ma variable par get. j'ai toujour null

Ce que je fais

mon routes.php :

Route::group(['middleware' => ['web']], function () { Route::get('/search','PagesController@search')->name('HomeSearch'); });

mon controller :

namespace app\Http\Controllers; use Illuminate\Http\Request; class PagesController extends Controller { public function search(Request $request){ $query = $request->get('query'); dd($query); } }

mon formulaire :

{!! Form::open(['class' =>'search-form','route'=>'HomeSearch','method'=>'GET']) !!} <div class="input-group"> {!! Form::text('query', null,['required','class'=>'form-control','placeholder'=>'Zone de recherche']) !!} </div> {!! Form::submit('Search', ['class'=>'btn btn-primary']) !!} {!! Form::close() !!}

Ce que je veux

Récupérer la variable query

Ce que j'obtiens

J'ai null si je récupére la variable par cette méthod :

$request->get('query')

si je fais un dd() du $request->all() j'obtiens le résultat suivant :

array:1 [▼ "url" => "/search?query=test" ]

Cela me semble juste mais je n'arrive pas a résoudre ce probléme.

Merci d'avance.

23 réponses

Alexandre #lbac, il y a 10 ans
$request->query('key');
khomalli, il y a 10 ans

@Chipie678 merci pour votre réponse, mon code est semblable à celui que tu ma fourni je ne sais pas ou est le probléme exactement.
@SquallX merci pour la réponse, c'est pareille j'ai toujour null.

Azorgh, il y a 10 ans

Hello,

Si tu utilise la facade Request ça donne quoi ? :

\Request::get('query'); /***** OU ALORS ****/ use Request; [...] Request::get('query');
khomalli, il y a 10 ans

Merci @PallMallShow mais aussi null

MaMouT, il y a 10 ans

Hello,

il ne manque pas le token dans le form ?

{!! Form::open(['class' =>'search-form','route'=>'HomeSearch','method'=>'GET']) !!} <input type="hidden" name="_token" value="{{ csrf_token() }}"> ...
Gold weavers, il y a 10 ans

non le csrf est direct intégrer quand tu génère une form avec cette méthode,
et si tu fais ?

$request->input('query');

Dans la doc ils précisent : "You do not need to worry about the HTTP verb used for the request, as input is accessed in the same way for all verbs"

khomalli, il y a 10 ans

@MaMouT par defaut le token est ajouté automatiquement.
@Gold weavers le même problème aussi null

Gold weavers, il y a 10 ans
Route::group(['middleware' => ['web']], function () { Route::get('/search/{query}','PagesController@search')->name('HomeSearch'); }); namespace app\Http\Controllers; use Illuminate\Http\Request; class PagesController extends Controller { public function search($query){ echo $query; } }

Et la ?

khomalli, il y a 10 ans

@Gold weavers cette méthode marche que si je tap l'url directe, un formulair envoie un url de ce type domaine/search?query=test et non domaine/search/test.

Azorgh, il y a 10 ans

Re,

Ayant un projet sur Laravel 5.2, j'ai essayé la méthode avec la facade :

use Request; Request::get('query');

Et aucun soucis pour moi !

Alexandre #lbac, il y a 10 ans

La méthode $request (avec l'object request en paramètre de la méthode) fonctionne parfaitement, que te retournes

Request::all(); // ou $request->all();
khomalli, il y a 10 ans

@PallMallShow je viens d'installer un nouveau projet, mais toujour le même probléme.

@SquallX me retourne :

array:1 [▼ "url" => "/search?query=test" ]
MaMouT, il y a 10 ans

Et si tu injectes l'objet request en paramètre ta fonction seach ?

public function search(Request $request, $query) ...
khomalli, il y a 10 ans

@MaMouT le méme résultat :

array:1 [▼ "url" => "/search?query=test" ]
MaMouT, il y a 10 ans

Tu pourrais faire un var_dump sur ton $query (au lieu) d'un echo, pour voir quel est l'objet que tu recupères ?

Alexandre #lbac, il y a 10 ans

Ce qui est bizarre c'est que $request->all() n'est pas censé te retourner le path...

Par quel moyen tu envoies ces données ?

khomalli, il y a 10 ans

@MaMouT le var_dump du request return un block de code qui plante le navigateur est-ce que c'est normal ?

object(Illuminate\Http\Request)#40 (24) {

@SquallX : par ce formulair

{!! Form::open(['class' =>'search-form','route'=>'HomeSearch','method'=>'GET']) !!} <div class="input-group"> {!! Form::text('query', null,['required','class'=>'form-control','placeholder'=>'Zone de recherche']) !!} </div> {!! Form::submit('Search', ['class'=>'btn btn-primary']) !!} {!! Form::close() !!}

J'ai cliqué par erreur sur Il a répondu à ma question !

Alexandre #lbac, il y a 10 ans

fais un dd($request->all()); pour voir

khomalli, il y a 10 ans

@SquallX : est-ce que c'est normal ?

array:1 [▼ "url" => "/search?query=test" ]
khomalli, il y a 10 ans

@SquallX : par contre si j'envoi le formulair par Post :

array:3 [▼ "_token" => "7J7xWHH131agJQnsivDFFmEUJnoOVGRCnnkrQ0Rw" "query" => "test" "url" => "/search" ]
Alexandre #lbac, il y a 10 ans

C'est normal. Je viens de comprendre ton soucis. Tu envois le formulaire avec la méthode GET, donc par conséquent tu dois le récupérer directement dans la même méthode et non dans une autre. Pour le récupérer dans une autre méthode tu dois effectivement utiliser la méthode POST pour la soumission du formulaire.

khomalli, il y a 10 ans

@SquallX : est-ce que c'est une convontion de laravel en php native on peux envoyer un formulair en get ou en post a une autre page sans probléme ? j'ai trouvé une solution existe-t-il d'autres ?

Route::get('/search/{query}','PagesController@search')->name('HomeSearch'); Route::post('/search', function(){ $query = Input::get('query'); return Redirect::action('PagesController@search', ['query'=>$query]); })->name('HomeSearch');