ZF2:调用redirect()url |从后期操作中触发GET

时间:2013-12-22 11:34:35

标签: php post redirect header zend-framework2

我有一个简单的帖子,看起来像

    $.ajax({
        url: '/album/createAlbum.html',
        type: 'POST',
        dataType: 'json',
        async: true,
        data: postData,
        success: function (data) {
            console.log("Successfully saved album");
            console.log(data);
            return data;
        },
        error: function (data) {
            console.log("FAILED to save album");
            return false;
        }
    });

和一个看起来像

的简单动作
public function createAlbumAction()
{
    $request    = $this->getRequest();
    $response   = $this->getResponse();

    $album     = $request->getPost('album');

    //First check to see if the user already has that album
    $albumObject = $this->_dataService->getAlbum($userID, $album);

    if ($albumObject){
       //This is the issue
        $this->redirect()->toRoute('albumModule', array('controller' => 'album', 'action' => 'edit'));
    } else {
        $albumObject    = $this->_dataService->createAlbum($userID, $album);
    }


    $messages = array();
    if (!empty($messages)){
        $response->setContent(\Zend\Json\Json::encode($messages));
    } else {
        $response->setContent(\Zend\Json\Json::encode(array('albumID' => $albumObject->getAlbumID())));
    }
    return $response;
}

我遇到的问题是redirect(),我知道重定向会将我发送到该路由,但我需要告诉浏览器GET该路由。我无法从POST弄清楚如何做到这一点。我读了一些关于将标题设置为303的内容,以便浏览器知道重定向,但我不知道如何在我的JSON响应中返回它。

即使我尝试header:("Location: " ...)也不会告诉浏览器获取网址。

1 个答案:

答案 0 :(得分:0)

我刚刚结束这个

在ajax电话

error: function (request, textStatus, errorThrown) {
        console.log("FAILED to save album");

        //The Album already exists, so redirect to it
        window.location = request.getResponseHeader('redirectURL');
        return false;
      },


关于ZF2行动

$response->setStatusCode(Response::STATUS_CODE_301)->getHeaders()
         ->addHeaders(array('redirectURL' => $this->url()->fromRoute('albumModule', array('controller' => 'album', 'action' => 'edit', 'id' => $albumObject->getAlbumID()))));
return $response;