2012-12-19 40 views
1

我有一個控制器的功能,需要檢查用戶是否已經登錄(我正在使用zfcuser模塊),如果沒有,向他們顯示登錄屏幕。ZF2登錄轉發

這是我的理解,我應該運行以下命令:

return $this->forward()->dispatch('zfcuser', array('action' => 'authenticate')); 

不幸的是,這改變了網址。我想顯示登錄屏幕,並允許用戶登錄,而無需更改網址。這意味着我還希望將用戶重定向到同一頁面,而不是轉到/user頁面。

我該如何做到這兩點?

+0

我寧願將鏈接保存到用戶想要訪問的會話,並且成功登錄後重定向到該頁面。 – motivast

+0

我同意kierzniak。我會在會話中保存路由名稱和參數,重定向到登錄並重定向回此路由信息。這顯然不會對POST請求起作用。 –

+0

你們都認爲保留網址會更好 - 這很公平,但我如何才能讓登錄重定向回來?一旦登錄(它是內置用戶的配置文件頁面),它當前會進入/用戶。 – Shoreline

回答

5

在過去的幾天裏,我自己一直在努力。 ZfcUser配置包括一個use_redirect_parameter_if_present設置,但文檔沒有給出任何關於如何使用這個設置的例子。我不知道我的方法是否可靠,但是這是我做得到的。請注意,此方法保留了URL,因爲它使用了轉發。我不確定另一種方式來執行此操作而不使用轉發。

在您的zfcuser配置文件中,繼續並將use_redirect_parameter_if_present設置爲true。這會導致ZfcUser的登錄操作在請求中查找redirect參數。它使用它在成功驗證後將用戶返回到指定的位置。

而且,在我想,以確保用戶登錄控制器,我有:

if (!$this->zfcUserAuthentication()->hasIdentity()) { 

    // Build the redirect URL using the route to which we want 
    // the user returned. 
    $redirect = $this->url()->fromRoute('your route', array(
     'optional-route-param' => 1234 
    )); 

    // Set the redirect URL in the request so that ZfcUser can 
    // pick it up. This is the key. 
    $this->getRequest()->getQuery()->set('redirect', $redirect); 

    // Use ZfcUser's login action rather than its authentication 
    // action. 
    return $this->forward()->dispatch('zfcuser', array(
     'action' => 'login' 
    )); 
} 

我希望幫助。如果你有問題得到這個工作,你可能需要發佈一些代碼。

+1

謝謝。我能夠從$ this-> getRequest() - > getRequestUri()構建重定向變量,這適合我的目的。 – Shoreline