情況如下:
一個添加文章的功能會涉及到兩個方法,比如方法add用來顯示這個添加文章的表單,另一個post方法用來接收提交的表單資料插入資料庫。
那麼問題是我把add方法寫到許可權控制裡面,在後台可以管理一個角色是否可以提交表單,add這個方法的頁面確實可以通過許可權阻止顯示表單這個頁面,但是還有一個post方法就不知道如何做到許可權的控制,因為我都是在父控制器裡做的判斷,根據當前訪問的方法名做的統一驗證,並不是每個方法都去寫驗證,而且一個添加文章的許可權又不好在後台顯示兩個方法讓去選擇,請問如何解決這個問題?(在add方法裡面寫判斷是否是post來處理這兩個邏輯感覺不合適,因為如果邏輯比較複雜的話,代碼不好組織,即便方便處理,也可能該功能還會有調用第三個方法第四個方法,還有ajax的許可權)謝謝
回複內容:
情況如下:
一個添加文章的功能會涉及到兩個方法,比如方法add用來顯示這個添加文章的表單,另一個post方法用來接收提交的表單資料插入資料庫。
那麼問題是我把add方法寫到許可權控制裡面,在後台可以管理一個角色是否可以提交表單,add這個方法的頁面確實可以通過許可權阻止顯示表單這個頁面,但是還有一個post方法就不知道如何做到許可權的控制,因為我都是在父控制器裡做的判斷,根據當前訪問的方法名做的統一驗證,並不是每個方法都去寫驗證,而且一個添加文章的許可權又不好在後台顯示兩個方法讓去選擇,請問如何解決這個問題?(在add方法裡面寫判斷是否是post來處理這兩個邏輯感覺不合適,因為如果邏輯比較複雜的話,代碼不好組織,即便方便處理,也可能該功能還會有調用第三個方法第四個方法,還有ajax的許可權)謝謝
沒法兒說,整體的邏輯很混亂。
如果你是RESTful應用,那麼不存在這個問題,所以肯定不是RESTful。那就沒必要把post獨立出來,自然就沒有你這種困擾了。例如你可以這樣解決:
public function addAction() { if ($this->getRequest()->isPost()) { $this->_addHandle(); }}
不知道你現在處在什麼階段,其實跳過許可權問題,如果post的資料不合法的時候怎麼辦?此時你需要add的視圖並附加錯誤資訊,post再調用add一次?
補充答案:
RESTful的時候通常只返回json資料,所以在post資料的時候並沒有請求表單這個使用權限設定,例如
列表 GET::/articles
詳情 GET::/articles/:id
建立 POST::/articles
編輯 PUT::/articles/:id
刪除 DEL::/articles/:id
當然也可以再自訂其它請求,和問題無關。
對於普通訪問中的ajax請求處理,看你使用的架構了,通常類似以下邏輯
public function addAction() { if ($this->getRequest()->isPost()) { //提交處理 } //預設處理,如擷取關聯資料等 //最後進行ajax識別 if ($this->getRequest()->isXMLHttpRequest()) { return $this->json();//用json方式輸出結果 } return $this->render();//用正常方式輸出結果}
你可能需要對所使用的架構更熟悉一些才好有整體的把控,建議github上找一個與你使用的技術對應的網站源碼看看,看看他們怎麼處理這種請求的。