看板 PHP 關於我們 聯絡資訊
菜鳥碼農的我最近開發一個案子,為了防止重複送出有用到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裡的東西呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.27.106.212 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1479865179.A.464.html
MOONRAKER: 為什麼用到三個view會檢查三次 一頁有三個controller嗎 11/23 13:38
MOONRAKER: 沒聽過There cannot be two tigers in one mountain嗎 11/23 13:38
並不是一次有三個controller...是在一個controller中使用了多個$this->load->view() 檢查三次??我有提到檢查三次嘛@@??
xdraculax: 把自訂錯誤作成 A 裡的 function _show_error 裡面就 v 11/23 20:35
xdraculax: iew 那頁,判斷錯誤的時候 return $this->_show_error( 11/23 20:35
xdraculax: 'csrf') 11/23 20:35
xdraculax: MY_Security protected $_csrf_error = FALSE; 11/23 21:38
xdraculax: csrf_show_error() { $this->_csrf_error = TRUE; 11/23 21:39
xdraculax: 加個 function 在 controler 去查 Security csrf_error 11/23 21:41
謝謝回答 不過我還是不太清楚,不過查了查,好像似乎沒辦法像我說那樣作,因為在載 入CI_Security之前,helper或是libraries都還沒被載入,所以只能夠用原始 的PHP代碼去建立東西:( 參考:http://stackoverflow.com/questions/14406922/prevent-from-displaying-the-default-csrf-error-page-in-codeigniter ※ 編輯: k80092 (61.27.106.212), 11/23/2016 22:19:57 ※ 編輯: k80092 (61.27.106.212), 11/23/2016 22:30:07 ※ 編輯: k80092 (61.27.106.212), 11/23/2016 22:30:50
xdraculax: CI_Security 可以被 MY_Security 改寫 11/24 09:38
我有改寫了,只是因為沒辦法使用controller中的寫法,也沒辦法呼叫helper所以 沒辦法做出我要的東西,謝謝你的回答,我再研究看看:),有研究出來再來回文~
MOONRAKER: 阿只有一個controller為什麼還會「希望錯誤訊息只顯示 11/24 13:07
MOONRAKER: 在中間的view」描述模模糊糊還怪別人喔 11/24 13:08
我有提到說我一個畫面是用多個view組成,我想您應該會知道一個controller可 以載入多個view吧?我也沒有怪別人,我一開始就有說我也說不太清楚。總之謝 謝您的回答,耍嘴皮子既沒辦法改善問題,也不會讓世界更好。我就此打住。 ※ 編輯: k80092 (61.27.106.212), 11/24/2016 19:02:14
xdraculax: 不需要在 Security 就把想要的頁面在裡面產生,只要把 11/24 19:26
xdraculax: 結果記下,讓 controller 能去讀取後再跑 view 就可以 11/24 19:26
xdraculax: 了,其實我上面的留言已把重點都留了 11/24 19:26
k80092: 他跑完csrf_show_error()就停在錯誤訊息的頁面,沒有進任 11/24 19:55
k80092: 何一個controller中的說...@_@ 11/24 19:56
k80092: x大的意思是先把錯誤訊息保存起來後再進controller把他讀 11/24 19:57
k80092: 出來沒錯吧? 11/24 19:57
et69523820: 把錯誤訊息保存 在輸出到樣版變數即可 就可以顯示你 11/25 07:24
et69523820: 指定的錯誤訊息顯示區域 11/25 07:25
xdraculax: 如果你改過他還是被 csrf_show_error 帶去預設錯誤頁 11/25 11:22
xdraculax: 表示你的 MY_Security 可能沒有改成功 11/25 11:26
xdraculax: danny22.idv.tw/download/ci_csrf_test.zip 11/25 11:51
k80092: 搞定了,謝謝x大,原來我一直以為進了csrf_show_error()後 11/28 12:07
k80092: 就不會回到controller,結果自己寫了個exit耍笨了,抱歉:( 11/28 12:10