Bonjour,
Je n'arrive pas a récupérer ma variable par get. j'ai toujour null
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() !!}
Récupérer la variable query
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.
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
@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');
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"
@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 ?
@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();
@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)
...
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 ?
@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 !
@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.
@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');