3 votes

Laravel 5 : Récupérer les données ajax dans une route et les passer au contrôleur

J'utilise Laravel 5 et je veux faire un appel ajax à un contrôleur avec des données :

 $.ajax({
    url : "/getOrgById",
    data : JSON.stringify({id:1})
})

Le site routes.php a :

Route::get('/getOrgById', 'HomeController@getOrgById');

HomeController.php :

public function getOrgById($data) {
   //code here fails with message 'Missing argument 1 for HomeController::getOrgById()
}

Comment puis-je passer les données d'ajax à route et ensuite au contrôleur ?

6voto

ElGamed Points 769

Je pense que l'exemple ci-dessous correspond à ce que vous recherchez.

Route

Route::post('/getOrgById', 'HomeController@getOrgById');

Contrôleur

public function getOrgById(Request $request) {
    $id = $request->input('id');
}

JS

var myJsonData = {id: 1}
$.post('/getOrgById', myJsonData, function(response) {
    //handle response
})

3voto

Martin Bean Points 9945

Vous devriez vraiment vous pencher sur des actions de contrôle ingénieuses. Si vous voulez récupérer une organisation par son ID, vous avez une entité organisation, créez donc un contrôleur organisation correspondant. Ce contrôleur peut alors avoir une méthode pour montrer une organisation en fonction de la valeur de sa clé primaire :

class OrganisationController
{
    public function show($id)
    {
        return Organisation::findOrFail($id);
    }
}

L'itinéraire pour cela ressemblerait à ceci :

Route::get('/organisations/{id}', 'OrganisationController@show');

Vous pouvez ensuite demander cette route via AJAX comme suit :

$.ajax({
    method: 'GET',
    url: '/organisations/' + id
});

0voto

afarazit Points 2769

Vous pouvez utiliser Input pour obtenir votre variable

public function getOrgById() {
     $data = \Input::get('data')
}

0voto

jeanj Points 1351

Vous pouvez définir des paramètres dans votre itinéraire :

Route::get('/getOrgById/{id}', 'HomeController@getOrgById');

Et appelez-le à travers :

$.ajax({
    url : "/getOrgById" + id
})

0voto

Mauro Casas Points 456

Vous aviez presque raison, mais en utilisant $data dans votre déclaration de fonction, vous demandez en fait une variable Query String, plutôt qu'une demande de formulaire.

Vous devez ajouter votre demande de formulaire dans votre méthode de contrôleur, comme ceci :

public function getOrgById(Request $request){
    // do something here...
    return response()->json(array('foo' => 'bar'));
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X