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

資訊專欄INFORMATION COLUMN

關于thinkphp5手動拋出Http異常時自定義404頁面報錯的問題

番茄西紅柿 / 2207人閱讀

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

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

可以使用thinkexceptionHttpException類來拋出異常

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

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

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

然而如果你這些都做完了,關閉調試模式,你會發現還是跳轉到官方自定義的頁面上去了,并且你發現http狀態碼是500,這是代碼有問題啊,我拋出的是404啊。

然后打開log日志,你會發現果然報錯了。

[ 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:  

這。。。
可怎么辦。。。

只能看源碼找問題了。

你會發現這個方法被調用了兩次。

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

第一次時$template模板文件時能找到的。但是第二次也是一個相對路徑view/layout,所以報錯了,繼續順藤摸瓜,發現這個函數。

/**  
     * 編譯模板文件內容  
     * @access private  
     * @param string    $content 模板內容  
     * @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) {  
                    // 替換布局的主體內容  
                    $content = str_replace($this->config[layout_item], $content, file_get_contents($layoutFile));  
                }  
            }  
        } else {  
            $content = str_replace({__NOLAYOUT__}, , $content);  
        }  
...  

 

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

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

這一點官方文檔沒有說明,還在坑里的同學可以參考改下。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/1017.html

相關文章

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

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

    yuanzhanghu 評論0 收藏0
  • 帶你拋出優雅的處理系統異常

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

    susheng 評論0 收藏0
  • 99%的程序都沒有考慮的網絡異常

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

    HollisChuang 評論0 收藏0
  • 一步一步搭建前端監控系統:JS錯誤監控篇

    摘要:摘要徒手寫錯誤監控。為什么用定時器呢,因為在單頁應用中,路由的切換和地址欄的變化是無法被監控的,我確實沒有想到特別好的辦法來監控,所以用了這種方式,如果有人有更好的辦法,請給我留言,謝謝。 摘要: 徒手寫JS錯誤監控。 作者:一步一個腳印一個坑 原文:搭建前端監控系統(二)JS錯誤監控篇 Fundebug經授權轉載,版權歸原作者所有。 背景:市面上的監控系統有很多,大多收費,對于...

    EdwardUp 評論0 收藏0
  • Python3網絡爬蟲實戰---21、使用Urllib:處理異常

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

    hlcfan 評論0 收藏0

發表評論

0條評論

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