redirect ZF3 () -> toUrl () ne redirigeant

voix
0

Je vais avoir un problème bizarre avec ZF3. J'ai une forme de vanille dans la vue et un ajax jquery pour l'envoyer au contrôleur, quelque chose comme ceci:

<form>some form</form>
<script>
    $(#form).submit(function (e) {
        e.preventDefault();
        $.ajax({
            method: POST,
            url: stats,
            data: {name: 'TEST'} // name selected in the form
        });
    });
</script>

Le contrôleur pour les statistiques d'action ressemble à ceci:

$stat = new Stat();

$route_name = $this->params()->fromRoute('name', 'none');
$post_name = $this->params()->fromPost('name', 'none');

if(!strcmp($route_name, 'none')) // if no redirection yet
{
    if(!strcmp($post_name, 'none')) // if no form was sent
    {
        // display the form to choose the customer
        return new ViewModel([
            'customer_list' => $stat->get_customer_list(),
        ]);
    }
    else // if the form was sent, get name and direct to /stats/someName
    {
        return $this->redirect()->toRoute('stats', ['name' => 'someName']);
    }
}
else // after redirection, get the name in the URL and show some data about this customer
{
    return new ViewModel([
        'avg_time' => $stat->get_avg_time(rawurldecode($route_name)),
    ]);
}

Le problème est que la redirection n'occure pas à l'écran , mais je reçois toujours le paramètre de route si imprimer $route_nameaprès avoir soumis le formulaire.

Quoi qu'il en soit, l'objectif est d'avoir une forme avec une sélection pour choisir le nom du client et charger les données clients dans /stats/[name]. Est-ce que je vais dans la mauvaise direction? Et la question de la redirection d' un bug ou mon code est erroné?

Créé 19/09/2018 à 13:21
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Il y a donc je l' ai résolu thx à rkeet, c'est la forme et jquery:

<form id="customer_choice" method="POST" action=""> some form </form>
<script>
    $("#customer_choice").submit(function () {
        $("#customer_choice").attr('action', 'stats/' + $("#customer_select").val())
    });
</script>

Et cela est le contrôleur (espérons qu'aucun client est nommé « none »):

$stat = new Stat();

$name = $this->params()->fromRoute('name', 'none');

if(!strcmp($name, 'none'))
{
    return new ViewModel([
        'customer_list' => $stat->get_customer_list(),
    ]);
}
else
{
    return new ViewModel([
        'avg_time' => $stat->get_avg_time($name),
    ]);
}

Le résultat est basepath/stats/[customer name]et de modifier l'URL fonctionne manuellement.

(Si vous ne voulez pas changer l'URL manuellement pour changer le résultat, utilisez fromPost au lieu de fromRoute)

Créé 20/09/2018 à 07:00
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more