ZF3 redirect()-> toUrl()不重定向

时间:2018-09-19 13:21:01

标签: redirect zend-framework3 zend-route

我在ZF3上遇到了一个奇怪的问题。 我在视图中有一个香草表单,并且有一个jquery ajax将其发送到控制器,如下所示:

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

动作统计信息的控制器如下:

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

问题是重定向没有在屏幕上发生,但是如果在提交表单后打印$route_name,我仍然得到route参数。

无论如何,目标是要有一个带有选择项的表单,以选择客户名称并将客户数据加载到/stats/[name]中。我朝错误的方向前进吗?重定向是Bug还是我的代码错误?

1 个答案:

答案 0 :(得分:0)

所以我在rkeet处解决了它,这是&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>

这是控制器(希望没有客户被命名为“ 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),
    ]);
}

结果为basepath/stats/[customer name],并且手动更改url也可以。

(如果您不想手动更改url来更改结果,请使用fromPost而不是fromRoute)