2014-09-10 45 views
0

是否有可能具有相同的路徑路徑,但是有兩種不同的動作。我想用一個動作,當用戶登錄和另一個當用戶沒有登錄。Symfony2:兩個動作的相同路徑路徑

/** 
* @Route("/", name="bundle_index") 
* @Template("NameBundle:Default:index.html.twig") 
*/ 

/** 
* @Route("/", name="bundle_index_auth") 
* @Security("has_role('ROLE_USER')") 
* @Template("NameBundle:Default:auth.html.twig") 
*/ 
+0

我不這麼認爲; symfony會始終開啓第一個潰敗動作。我建議在你的路由中使用一個變量,例如'* @Route(「/ {isset_var}」,name =「bundle_index」)',並且通過這個動作來處理它,這樣如果沒有設置,首先做第二件事;或者甚至在訪問控制部分將路徑設置爲ANONYMOUS用戶,然後在您的操作中處理它,如果用戶未通過身份驗證首先要做的事情否則第二件事 – Javad 2014-09-10 14:11:00

回答

0

使用不同的名字,我覺得不一樣的路徑,我無法想象在這種情況下,這可能是有用的,即使我們可以做到這一點(也許如果你更好地解釋你想達到的目標),但看看你的例子,你可以做同樣的動作所需的所有檢查...檢查ROLE_USER是否被授予用戶(否則重定向用戶或拋出一個訪問異常白色與你的例子相同的行爲),並因此渲染正確的模板(顯然與任何其他操作需要)。

+0

這就是我目前正在做的,有一個操作並檢查用戶是否登錄然後將他重定向到適當的行動。但我覺得它會爲用戶的網址添加垃圾。我希望用戶只看到「http:// www.mywebsite.com /」他是否已登錄,但是當他登錄時,他看不到相同的頁面。無論如何,就像我說過的,我已經實施了這個解決方案,但我仍然在想。 – 2014-09-10 20:02:35

+0

但是,檢查用戶來自哪裏的操作?我希望這不是來自登錄行爲,不是嗎?否則,您可以使用不同的http方法使用相同的路徑,例如CRUD操作(GET用於訪問,POST用來檢查證書)。首先看起來這聽起來非常類似於「記住我」操作......(顯然已經在symfony中)。你有沒有想過「聽衆」或「事件」? – 2014-09-10 21:00:27