国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關(guān)于thinkphp5手動拋出Http異常時(shí)自定義404頁面報(bào)錯(cuò)的問題

番茄西紅柿 / 2197人閱讀

摘要:在使用手動拋出異常時(shí),希望跳轉(zhuǎn)到自定義的錯(cuò)誤頁面,官方的文章中是這樣描述的。只能看源碼找問題了。而這個(gè)布局文件的路徑是一個(gè)相對路徑,這時(shí)如果你拋出異常的地方不是在的里,就找不到布局文件了。

在使用HttpException手動拋出異常時(shí),希望跳轉(zhuǎn)到自定義的錯(cuò)誤頁面,官方的文章中是這樣描述的。

可以使用thinkexceptionHttpException類來拋出異常

// 拋出 HTTP 異常  
throw new thinkexceptionHttpException(404, 異常消息, null, [參數(shù)]);  

一旦拋出了HttpException異常,可以支持定義多帶帶的異常頁面的模板地址,只需要在應(yīng)用配置文件中增加:

http_exception_template    =>  [  
    // 定義404錯(cuò)誤的重定向頁面地址  
    404 =>  APP_PATH.404.html,  
    // 還可以定義其它的HTTP status  
    401 =>  APP_PATH.401.html,  
]  

然而如果你這些都做完了,關(guān)閉調(diào)試模式,你會發(fā)現(xiàn)還是跳轉(zhuǎn)到官方自定義的頁面上去了,并且你發(fā)現(xiàn)http狀態(tài)碼是500,這是代碼有問題啊,我拋出的是404啊。

然后打開log日志,你會發(fā)現(xiàn)果然報(bào)錯(cuò)了。

[ error ] [1]Uncaught thinkexceptionTemplateNotFoundException: template not exists:view/layout.html in /Applications/MAMP/htdocs/best.shiqidu.com/thinkphp/library/think/Template.php:1082  
Stack trace:  

這。。。
可怎么辦。。。

只能看源碼找問題了。

你會發(fā)現(xiàn)這個(gè)方法被調(diào)用了兩次。

/**  
     * 解析模板文件名  
     * @access private  
     * @param  string $template 文件名  
     * @return string|false  
     */  
    private function parseTemplateFile($template)  
    {...}  

第一次時(shí)$template模板文件時(shí)能找到的。但是第二次也是一個(gè)相對路徑view/layout,所以報(bào)錯(cuò)了,繼續(xù)順藤摸瓜,發(fā)現(xiàn)這個(gè)函數(shù)。

/**  
     * 編譯模板文件內(nèi)容  
     * @access private  
     * @param string    $content 模板內(nèi)容  
     * @param string    $cacheFile 緩存文件名  
     * @return void  
     */  
    private function compiler(&$content, $cacheFile)  
    {  
        // 判斷是否啟用布局  
        if ($this->config[layout_on]) {  
            if (false !== strpos($content, {__NOLAYOUT__})) {  
                // 可以多帶帶定義不使用布局  
                $content = str_replace({__NOLAYOUT__}, , $content);  
            } else {  
                // 讀取布局模板  
                $layoutFile = $this->parseTemplateFile($this->config[layout_name]);  
                if ($layoutFile) {  
                    // 替換布局的主體內(nèi)容  
                    $content = str_replace($this->config[layout_item], $content, file_get_contents($layoutFile));  
                }  
            }  
        } else {  
            $content = str_replace({__NOLAYOUT__}, , $content);  
        }  
...  

 

關(guān)鍵就是這里了,如果你沒有{__NOLAYOUT__}這個(gè)表示的話,它在渲染自定義404頁面時(shí)會去加載布局文件(如果你在配置文件里開啟了布局,如果沒開啟layout=true,也不會報(bào)這個(gè)錯(cuò))。
而這個(gè)布局文件的路徑是一個(gè)相對路徑,這時(shí)如果你拋出異常的地方不是在applicationcontroller里,就找不到布局文件了。所以就報(bào)錯(cuò)了。

怎么解決呢?其實(shí)也很簡單。給自定義的404頁面加上{__NOLAYOUT__}就行了。

這一點(diǎn)官方文檔沒有說明,還在坑里的同學(xué)可以參考改下。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/1017.html

相關(guān)文章

  • 解讀 thinkphp5 源碼(二):異常處理和請求生命周期

    摘要:異常處理上節(jié)解讀源碼一自動加載看完了自動加載部分,根據(jù)代碼執(zhí)行順序,的行注冊錯(cuò)誤和異常處理機(jī)制加載慣例配置文件下面的加載配置文件不用說,現(xiàn)在重點(diǎn)看一下異常處理。博客鏈接解讀源碼二異常處理和請求生命周期 異常處理 上節(jié)解讀 thinkphp5 源碼(一):自動加載看完了自動加載部分,根據(jù)代碼執(zhí)行順序,base.php的59-64行 // 注冊錯(cuò)誤和異常處理機(jī)制 hinkError::r...

    yuanzhanghu 評論0 收藏0
  • 帶你拋出優(yōu)雅的處理系統(tǒng)異常

    摘要:關(guān)于拋出異常如在我的上一篇文中所說的一樣在接口的設(shè)計(jì)中接口的返回的數(shù)據(jù)是非常重要的例如無法避免的等等這些都是要命的錯(cuò)誤同時(shí)還有一個(gè)極大的問題就是在新增模塊中例如我最近需要新增一個(gè)的分詞查詢模塊這個(gè)在添加索引刪除索引等等操作的時(shí)候是非常容易導(dǎo) showImg(http://pqykjwm6s.bkt.clouddn.com/Grassland_Scenery_by_Shi_Yuejun....

    susheng 評論0 收藏0
  • 99%的程序都沒有考慮的網(wǎng)絡(luò)異常

    摘要:本文由云社區(qū)發(fā)表絕大多數(shù)程序只考慮了接口正常工作的場景,而用戶在使用我們的產(chǎn)品時(shí)遇到的各類異常,全都丟在看似的中。在面板,還可以對請求進(jìn)行暫停延遲等網(wǎng)絡(luò)異常的模擬。小程序?qū)崿F(xiàn)最后,留一道思考題。 本文由云+社區(qū)發(fā)表 絕大多數(shù)程序只考慮了接口正常工作的場景,而用戶在使用我們的產(chǎn)品時(shí)遇到的各類異常,全都丟在看似 ok 的 try catch 中。如果沒有做好異常的兼容和兜底處理,會極大的影...

    HollisChuang 評論0 收藏0
  • 一步一步搭建前端監(jiān)控系統(tǒng):JS錯(cuò)誤監(jiān)控篇

    摘要:摘要徒手寫錯(cuò)誤監(jiān)控。為什么用定時(shí)器呢,因?yàn)樵趩雾搼?yīng)用中,路由的切換和地址欄的變化是無法被監(jiān)控的,我確實(shí)沒有想到特別好的辦法來監(jiān)控,所以用了這種方式,如果有人有更好的辦法,請給我留言,謝謝。 摘要: 徒手寫JS錯(cuò)誤監(jiān)控。 作者:一步一個(gè)腳印一個(gè)坑 原文:搭建前端監(jiān)控系統(tǒng)(二)JS錯(cuò)誤監(jiān)控篇 Fundebug經(jīng)授權(quán)轉(zhuǎn)載,版權(quán)歸原作者所有。 背景:市面上的監(jiān)控系統(tǒng)有很多,大多收費(fèi),對于...

    EdwardUp 評論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---21、使用Urllib:處理異常

    摘要:最后用來處理正常的邏輯,這是一個(gè)較好的異常處理寫法。上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)使用發(fā)送請求下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)使用解析鏈接 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---20、使用Urllib:發(fā)送請求下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---22、使用Urllib:解析鏈接 在前面一節(jié)我們了解了 Request 的發(fā)送過程,但是在網(wǎng)絡(luò)情況不好的情況下,出現(xiàn)了異常怎么辦呢?這時(shí)如果我們...

    hlcfan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<