2016-07-05 65 views
7

我正在開發我的一個Web應用程序。 我有這樣一段代碼:正在檢查分類爲業務邏輯的SESSION變量的值?

<?php 
if($_SESSION['add'] == 1) 
echo '<input type="button" name="add" id="add" value="Add" onclick="add()" >'; 
if($_SESSION['edit'] == 1) 
echo '<input type="button" name="edit" id="edit" value="Edit" onclick="edit()">'; 
?> 

基本上,當用戶登錄時,我設置會話變量,指示用戶是否被授權進行更改和添加記錄。所以當他們到達主頁時,我使用這段代碼來決定是否顯示我的添加和編輯按鈕。

此代碼是否違反了邏輯/表示分離的規則?如果是這樣,我該如何實現分離?

我沒有使用任何Web框架。

+2

如果add()和edit()只是一個javascript函數,那麼即使他們沒有訪問權限,人們也可以調用它們。 –

+0

所以我應該如何解決這個問題? –

回答

10

雖然View中的條件非常好,但您的View不應嘗試從任何源自身獲取任何數據。這不是它的作用,它只應用於你的Controller(或Presenter,取決於你的應用程序體系結構)提供的數據。你的觀點不應該知道背後的邏輯爲什麼editadd模式之間切換。它只需要知道如何訂購。在你的情況下,控制器應該檢查$_SESSION,並決定什麼模式,添加或編輯你的視圖應該顯示並將該決定傳遞給你的視圖(即action_mode = edit|add)啞執行。 PS:我建議養成一種習慣,即在{,}括號內始終放置代碼塊(甚至是單行)。

+0

我很難理解你的答案,對不起。 –

+2

@Connor簡而言之:您希望從特定的數據源'$ _SESSION'中*分離*您的視圖邏輯。您可能會在將來出現其他情況,其中'$ _SESSION'以外的其他情況決定了特定的編輯模式,您不希望將該決定直接與'$ _SESSION'變量相關聯。 – deceze