Laravel 5

Problème de Session avec un formulaire multi-étape

  • Avatar de Vable
    Membre depuis :
    12/02/2016
    Messages :
    16

    Bonjour,
    Pour un projet, j'ai un très gros formulaire que les gens doivent remplir. J'ai donc divisé le formulaire en plusieurs étapes et je passe par AJAX pour la soumission. A chaque étape remplie, les valeurs entrées sont envoyées en session et lors de la dernière étape, je récupère ce qui ce trouve en session et j'enregistre dans la base de donnée.
    Mon soucis, c'est que de temps en temps (pas tout le temps) les formulaires sont bien soumis mais l'enregistrement en session ne se fait pas et je me retrouve avec des erreurs d'undefined index lors de l'envoi en BDD...
    J'utilise des routes pour l'envoi :

    Route::post('formulaire/step-1', 'FormController@step1');
    Route::post('formulaire/step-2', 'FormController@step2');
    Route::post('formulaire/step-3', 'FormController@step3');
    Route::post('formulaire/step-4', 'FormController@step4');
    ...

    Une requête AJAX pour une étape ressemble à ceci :

    S1.on('submit', function(e) {
    e.preventDefault();
    ajaxS1($(this).attr('method'), $(this).attr('action'), $(this).serialize());
    });
    function ajaxS1(m, u, d) {
    $.ajax({
    method: m,
    url: u,
    data: d,
    dataType: "json"
    })
    .done(function() {
    status1 = 1;
    step = 2;

    var tab2 = '#' + getElementClicked().attr('aria-controls');
    $('a[href="'+tab2+'"]').tab('show');
    setPrevNext(tab2);

    })
    .fail(function(data) {
    status1 = 0;
    var s1errors = data.responseJSON;
    $.each(s1errors, function (key, value) {
    console.log(key, value);
    var input = '#step-1 input[name="' + key + '"]';
    $(input + '+small').text(value);
    $(input).parent().addClass('has-error');
    if(key == 'c-title') {
    $('#c-title').parent().addClass('has-error');
    $('#c-title').parent().find('small').text(value);
    }
    if(key === 'nationality') {
    $('#nationality').parent().addClass('has-error');
    $('#nationality').parent().find('small').text(value);
    } else if ( key === 'c-nationality') {
    $('#c-nationality').parent().addClass('has-error');
    $('#c-nationality').parent().find('small').text(value);
    }
    });
    });
    }

    Et dans mon controller j'enregistre simplement en session de cette manière :

    public function step1 (RequestSaveFirstPartData $request) {
    Session::put($request->all());
    return response()->json();

    Il est à noter que l'étape 1 se soumet à chaque étape (quand on soumet l'étape2, l'étape1 se soumet aussi) car cette partie est constament affichée et du coup il faut prévoir les modifications.

    Je ne sais pas si tout est clair...
    Ce que je ne comprend pas, c'est que c'est vraiment aléatoire, des fois tout s'enregistre correctement en session, de temps en temps l'étape 3 ne s'enregistre pas, d'autre fois c'est l'étape 1, etc.
    Quelqu'un aurait une idée d'où cela pourrait venir ?
    N'hésitez pas à demander si vous avez besoin de détails supplémentaires

Vous ne pouvez pas répondre à ce sujet.