ZF3 redirect () -> toUrl () niet omgeleid

stemmen
0

Ik heb een vreemd probleem met ZF3. Ik heb een vanilla vorm in het uitzicht en een jQuery ajax om deze naar de controller, zoiets als dit te sturen:

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

De controller voor de actie statistieken ziet er als volgt uit:

$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)),
    ]);
}

Het probleem is dat de omleiding niet occure op het scherm, maar ik krijg nog steeds de parameter route als ik af te drukken $route_namena het indienen van het formulier.

Hoe dan ook, het doel is om een formulier met een select om de naam van de klant kiest en de gegevens van de klant te laden in hebben /stats/[name]. Ga ik in de verkeerde richting? En is de omleiding kwestie een bug of mijn code verkeerd?

De vraag is gesteld op 19/09/2018 om 13:21
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

Dus daar heb ik opgelost dank aan rkeet, dit is de vorm en 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>

En dit is de besturing (hoop dat geen enkele klant heet '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),
    ]);
}

Het resultaat is basepath/stats/[customer name]en het veranderen van de url werkt ook handmatig.

(Als je niet wilt handmatig veranderen van de url om het resultaat te veranderen, gebruik fromPost plaats van fromRoute)

antwoordde op 20/09/2018 om 07:00
bron van user

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