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


MaMouT
Réponse acceptée

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

Coucou ,
Je pense que ce que tu chercher est ici http://learninglaravel.net/laravel-5-simple-search-box-using-get-method/link
Dommage que j'utilise laravel 4.2 :)
Bonne chance a toi tout de même

$request->query('key');
khomalli
Auteur

@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.

Hello,

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

\Request::get('query');

/***** OU ALORS ****/
use Request;

[...]

Request::get('query');
khomalli
Auteur

Merci @PallMallShow mais aussi null

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() }}">
...

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
Auteur

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

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
Auteur

@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.

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 !

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
Auteur

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

@SquallX me retourne :

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

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

public function search(Request $request, $query)
...
khomalli
Auteur

@MaMouT le méme résultat :

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

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
Auteur

@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 !

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

khomalli
Auteur

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

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

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

array:3 [▼
  "_token" => "7J7xWHH131agJQnsivDFFmEUJnoOVGRCnnkrQ0Rw"
  "query" => "test"
  "url" => "/search"
]

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
Auteur

@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');