[請益] CI框架的csrf錯誤頁面

作者: k80092 (遊)   2016-11-23 09:39:36
菜鳥碼農的我最近開發一個案子,為了防止重複送出有用到csrf
在codeigniter中,可以在application/views/errors/html/error_general.php
中自訂show_error()後的頁面,我想問的是,我如果override
csrf_error()或是show_error()後,有辦法讓他跳到某個controller中
或是如同一般controller使用嗎?
因為我如果要override csrf_error()的話,繼承的不是CI_Controller
,就算用&get_interface()也無法調用controller的任何方法...
沒有辦法很好的說明真是不好意思:(,總之架構上來說就是在core裡有
A->繼承CI_Controller,存放了我在所有Controller要用到的所有方法
之後每一張Controller都是繼承了A,然後因為我的每個頁面的表頭表尾
都是一樣的,所以用了三個view組成一個畫面,現在我希望將錯誤訊息只
顯示在中間的view,但如果去改ci預設的那張php的話,雖然畫面上可以
達成,但因為我的頁面表頭有分成不同使用者有不同選單,沒靠controller
裡的方法無法判定,所以想問看看有沒有什麼方法可以辦到讓show_error()
或csrf_error()可以呼叫controller裡的東西呢?
作者: MOONRAKER (㊣牛鶴鰻毛人)   2016-11-23 13:38:00
為什麼用到三個view會檢查三次 一頁有三個controller嗎沒聽過There cannot be two tigers in one mountain嗎
作者: xdraculax (首席怪叔叔)   2016-11-23 20:35:00
把自訂錯誤作成 A 裡的 function _show_error 裡面就 view 那頁,判斷錯誤的時候 return $this->_show_error('csrf')MY_Security protected $_csrf_error = FALSE;csrf_show_error() { $this->_csrf_error = TRUE;加個 function 在 controler 去查 Security csrf_errorCI_Security 可以被 MY_Security 改寫
作者: MOONRAKER (㊣牛鶴鰻毛人)   2016-11-24 13:07:00
阿只有一個controller為什麼還會「希望錯誤訊息只顯示在中間的view」描述模模糊糊還怪別人喔
作者: xdraculax (首席怪叔叔)   2016-11-24 19:26:00
不需要在 Security 就把想要的頁面在裡面產生,只要把結果記下,讓 controller 能去讀取後再跑 view 就可以了,其實我上面的留言已把重點都留了
作者: k80092 (遊)   2016-11-24 19:55:00
他跑完csrf_show_error()就停在錯誤訊息的頁面,沒有進任何一個controller中的說...@_@x大的意思是先把錯誤訊息保存起來後再進controller把他讀出來沒錯吧?
作者: et69523820 (小豬)   2016-11-25 07:24:00
把錯誤訊息保存 在輸出到樣版變數即可 就可以顯示你指定的錯誤訊息顯示區域
作者: xdraculax (首席怪叔叔)   2016-11-25 11:22:00
如果你改過他還是被 csrf_show_error 帶去預設錯誤頁表示你的 MY_Security 可能沒有改成功danny22.idv.tw/download/ci_csrf_test.zip
作者: k80092 (遊)   2016-11-28 12:07:00
搞定了,謝謝x大,原來我一直以為進了csrf_show_error()後就不會回到controller,結果自己寫了個exit耍笨了,抱歉:(

Links booklink

Contact Us: admin [ a t ] ucptt.com