2012-09-19 23 views
2

有關that的問題。
我明白我必須創建一些服務來處理我的實體等等。這是因爲我必須將我的邏輯從控制器「移動」到「管理者」(即服務)Symfony2:最好使用會話對象還是我自己的管理器?

現在我有一個服務,它有一些邏輯。在該服務中,我根據用戶返回一個「關聯對象」的列表 - 說那些對象是sport的團隊。
假設我的列表中的第一個元素(以某種方式從存儲庫生成)是「默認」團隊,並且說我有一個頁面,我可以對其進行更改對於所有會話長
註銷或會話過期後,我想返回「默認」狀態。所以我的想法是:「因爲我爲這個實體編寫了一個管理器,所以我將在這個類中編寫一個私有屬性,其中load(從db)這個屬性和store(暫時的,用setter方法)我的更改「。
這不會影響我的分貝,我可以長時間保留我所有會話的信息。

但是我想到一個想法:會話對象怎麼樣? (如果我沒有理解錯誤,那麼這是一項服務)
我的解決方案是一個很好的解決方案,還是更好地將我的信息存儲到會話對象中?
從我的角度來看,它是相同的,只不過我可以使用app.session直接從樹枝讀取會話的變量。我錯了嗎?另外,如果我沒有錯,我怎樣才能從樹枝訪問我的對象屬性,而不是每次都從控制器傳遞它們? (很像有一個全局變量,我想要在我的應用程序頁面中隨處顯示)。

編輯:

的更多信息可以在this chat transcript找到。

回答

1

如果要在會話期間存儲變量(例如,登錄到註銷或只要用戶未關閉瀏覽器窗口),則必須將其存儲在會話對象中。如果要在請求期間存儲變量,則可以將其存儲在管理器服務中。

但是,您可以使用管理器服務加載會話變量並將其提供給控制器。

就像將控制器與數據庫/原理分離是一個好主意,將控制器與會話分離也是一個好主意。

更新:如在查看REST時的註釋中所述,在服務中執行會話內容不是一個好主意。但是,您仍然應該在會話中存儲變量並使用控制器來設置服務中的值。

+0

Yuo dind't瞭解我的問題。我不想將數據暫時存儲到實體中,也不想將其保存到數據庫中。我有我的實體,並使用ORM和實體管理器從它讀取/寫入。我不想改變這一點。我的問題是關於我所謂的「經理」。我已經創建了一個類並將其聲明爲一個服務(如前面問題中的elnur提示我)。既然我已經有了位於控制器和存儲庫之間的那個服務,那麼使用它來存儲一些變量還是更好地將它用於會話?這就是問題 – DonCallisto

+0

實際上,將控制器與會話分開是不是一個好主意 - 這正是會話所屬的工作。相反,管理者根本不應該瞭解會話,因爲會話僅適用於某些類型的用戶 - 比如Web用戶 - 雖然他們對於REST API沒有意義 - 但兩者都會使用同樣的經理人。 –

+0

@elnur:如果我僅僅爲此目的而使用經理,並且如果我總是保留這些信息,這不會改變您的答案?此外,據我所知服務有一個「國家」。不是嗎?因爲如果我將我的服務上的setXXX調用到控制器中,那麼當我將getXXX調用到另一個控制器時,似乎我以前的值分配不受保護 – DonCallisto

相關問題