亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

?? ??? ??
閱讀前篇 簡介 Yii 是什么 從 Yii 1.1 升級 入門 安裝 Yii 運(yùn)行應(yīng)用 第一次問候 使用Forms 數(shù)據(jù)庫應(yīng)用 使用 Gii 生成代碼 進(jìn)階 應(yīng)用結(jié)構(gòu) 概述 入口腳本 應(yīng)用(Applications) 應(yīng)用組件(Application Components) 控制器(Controllers) 模型(Models) 視圖(views) 模塊(Modules) 過濾器(Filters) 小部件(Widgets) 前端資源(Assets) 擴(kuò)展(Extensions) 請求處理 運(yùn)行概述 啟動引導(dǎo)(Bootstrapping) 路由和創(chuàng)建URL 請求(Requests) 響應(yīng)(Responses) Sessions 和 Cookies 錯誤處理(Handling Errors) 日志(Logging) 關(guān)鍵概念 組件(Component) 屬性(Property) 事件(Events) 行為(Behaviors) 配置(Configurations) 別名(Aliases) 類自動加載(Autoloading) 服務(wù)定位器(Service Locator) 依賴注入容器(Dependency Injection Container) 配合數(shù)據(jù)庫工作 數(shù)據(jù)庫訪問 (Data Access Objects) 查詢生成器(Query Builder) 活動記錄(Active Record) 數(shù)據(jù)庫遷移(Migrations) Sphinx Redis MongoDB Elasticsearch 接收用戶數(shù)據(jù) 創(chuàng)建表單(Creating Forms) 輸入驗證(Validating Input) 文件上傳(Uploading Files) 收集列表輸入(Collecting Tabular Input) 多模型的復(fù)合表單(Getting Data for Multiple Models) 顯示數(shù)據(jù) 格式化輸出數(shù)據(jù)(Data Formatting) 分頁(Pagination) 排序(Sorting) 數(shù)據(jù)提供器(Data Providers) 數(shù)據(jù)小部件(Data Widgets) 客戶端腳本使用(Working with Client Scripts) 主題(Theming) 安全 認(rèn)證(Authentication) 授權(quán)(Authorization) 處理密碼(Working with Passwords) 客戶端認(rèn)證(Auth Clients) 最佳安全實踐(Best Practices) 緩存 概述 數(shù)據(jù)緩存 片段緩存 頁面緩存 HTTP 緩存 RESTfull Web服務(wù) 快速入門(Quick Start) 資源(Resources) 控制器(Controllers) 路由(Routing) 格式化響應(yīng)(Response Formatting) 授權(quán)認(rèn)證(Authentication) 速率限制(Rate Limiting) 版本(Versioning) 錯誤處理(Error Handling) 開發(fā)工具 調(diào)試工具欄和調(diào)試器 使用Gii生成代碼 生成API文檔 測試 概述(Overview) 配置測試環(huán)境(Testing environment setup) 單元測試(Unit Tests) 功能測試(Function Tests) 驗收測試(Acceptance Tests) 測試夾具(Fixtures) 高級專題 高級應(yīng)用模板 創(chuàng)建自定義應(yīng)用程序結(jié)構(gòu) 控制臺命令 核心驗證器(Core Validators) 國際化 收發(fā)郵件 性能優(yōu)化 共享主機(jī)環(huán)境 模板引擎 集成第三方代碼 小部件 Bootstrap 小部件 Jquery UI 助手類 概述 Array 助手(ArrayHelper) Html 助手(Html) Url 助手(Url)
??

錯誤處理

錯誤處理

Yii 內(nèi)置了一個yii\web\ErrorHandler錯誤處理器,它使錯誤處理更方便, Yii錯誤處理器做以下工作來提升錯誤處理效果:

  • 所有非致命PHP錯誤(如,警告,提示)會轉(zhuǎn)換成可獲取異常;
  • 異常和致命的PHP錯誤會被顯示,在調(diào)試模式會顯示詳細(xì)的函數(shù)調(diào)用棧和源代碼行數(shù)。
  • 支持使用專用的?控制器操作?來顯示錯誤;
  • 支持不同的錯誤響應(yīng)格式;

yii\web\ErrorHandler 錯誤處理器默認(rèn)啟用, 可通過在應(yīng)用的入口腳本中定義常量YII_ENABLE_ERROR_HANDLER來禁用。

使用錯誤處理器

yii\web\ErrorHandler 注冊成一個名稱為errorHandler應(yīng)用組件, 可以在應(yīng)用配置中配置它類似如下:

return [
    'components' => [
        'errorHandler' => [
            'maxSourceLines' => 20,
        ],
    ],
];

使用如上代碼,異常頁面最多顯示20條源代碼。

如前所述,錯誤處理器將所有非致命PHP錯誤轉(zhuǎn)換成可獲取異常,也就是說可以使用如下代碼處理PHP錯誤:

use Yii;
use yii\base\ErrorException;

try {
    10/0;
} catch (ErrorException $e) {
    Yii::warning("Division by zero.");
}

// execution continues...

如果你想顯示一個錯誤頁面告訴用戶請求是無效的或無法處理的,可簡單地拋出一個 yii\web\HttpException異常, 如 yii\web\NotFoundHttpException。錯誤處理器會正確地設(shè)置響應(yīng)的HTTP狀態(tài)碼并使用合適的錯誤視圖頁面來顯示錯誤信息。

use yii\web\NotFoundHttpException;

throw new NotFoundHttpException();

自定義錯誤顯示

yii\web\ErrorHandler錯誤處理器根據(jù)常量YII_DEBUG的值來調(diào)整錯誤顯示, 當(dāng)YII_DEBUG?為 true (表示在調(diào)試模式),錯誤處理器會顯示異常以及詳細(xì)的函數(shù)調(diào)用棧和源代碼行數(shù)來幫助調(diào)試, 當(dāng)YII_DEBUG?為 false,只有錯誤信息會被顯示以防止應(yīng)用的敏感信息泄漏。

補(bǔ)充: 如果異常是繼承 yii\base\UserException,不管YII_DEBUG為何值,函數(shù)調(diào)用棧信息都不會顯示, 這是因為這種錯誤會被認(rèn)為是用戶產(chǎn)生的錯誤,開發(fā)人員不需要去修正。

yii\web\ErrorHandler 錯誤處理器默認(rèn)使用兩個視圖顯示錯誤:

  • @yii/views/errorHandler/error.php: 顯示不包含函數(shù)調(diào)用棧信息的錯誤信息是使用, 當(dāng)YII_DEBUG?為 false時,所有錯誤都使用該視圖。
  • @yii/views/errorHandler/exception.php: 顯示包含函數(shù)調(diào)用棧信息的錯誤信息時使用。

可以配置錯誤處理器的 yii\web\ErrorHandler::errorView 和 yii\web\ErrorHandler::exceptionView 屬性 使用自定義的錯誤顯示視圖。

使用錯誤操作

使用指定的錯誤操作?來自定義錯誤顯示更方便, 為此,首先配置errorHandler組件的 yii\web\ErrorHandler::errorAction 屬性,類似如下:

return [
    'components' => [
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
    ]
];

yii\web\ErrorHandler::errorAction 屬性使用路由到一個操作, 上述配置表示不用顯示函數(shù)調(diào)用棧信息的錯誤會通過執(zhí)行site/error操作來顯示。

可以創(chuàng)建site/error?操作如下所示:

namespace app\controllers;

use Yii;
use yii\web\Controller;

class SiteController extends Controller{
    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
        ];
    }
}

上述代碼定義error?操作使用yii\web\ErrorAction 類,該類渲染名為error視圖來顯示錯誤。

除了使用yii\web\ErrorAction, 可定義error?操作使用類似如下的操作方法:

public function actionError(){
    $exception = Yii::$app->errorHandler->exception;
    if ($exception !== null) {
        return $this->render('error', ['exception' => $exception]);
    }
}

現(xiàn)在應(yīng)創(chuàng)建一個視圖文件為views/site/error.php,在該視圖文件中,如果錯誤操作定義為yii\web\ErrorAction, 可以訪問該操作中定義的如下變量:

  • name: 錯誤名稱
  • message: 錯誤信息
  • exception: 更多詳細(xì)信息的異常對象,如HTTP 狀態(tài)碼,錯誤碼,錯誤調(diào)用棧等。

補(bǔ)充: 如果你使用?基礎(chǔ)應(yīng)用模板?或?高級應(yīng)用模板, 錯誤操作和錯誤視圖已經(jīng)定義好了。

自定義錯誤格式

錯誤處理器根據(jù)響應(yīng)設(shè)置的格式來顯示錯誤, 如果yii\web\Response::format 響應(yīng)格式為html, 會使用錯誤或異常視圖來顯示錯誤信息,如上一小節(jié)所述。 對于其他的響應(yīng)格式,錯誤處理器會錯誤信息作為數(shù)組賦值給yii\web\Response::data屬性,然后轉(zhuǎn)換到對應(yīng)的格式, 例如,如果響應(yīng)格式為json,可以看到如下響應(yīng)信息:

HTTP/1.1 404 Not Found
Date: Sun, 02 Mar 2014 05:31:43 GMT
Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8

{
    "name": "Not Found Exception",
    "message": "The requested resource was not found.",
    "code": 0,
    "status": 404
}

可在應(yīng)用配置中響應(yīng)response組件的beforeSend事件來自定義錯誤響應(yīng)格式。

return [
    // ...
    'components' => [
        'response' => [
            'class' => 'yii\web\Response',
            'on beforeSend' => function ($event) {
                $response = $event->sender;
                if ($response->data !== null) {
                    $response->data = [
                        'success' => $response->isSuccessful,
                        'data' => $response->data,
                    ];
                    $response->statusCode = 200;
                }
            },
        ],
    ],
];

上述代碼會重新格式化錯誤響應(yīng),類似如下:

HTTP/1.1?200?OK
Date:?Sun,?02?Mar?2014?05:31:43?GMT
Server:?Apache/2.2.26?(Unix)?DAV/2?PHP/5.4.20?mod_ssl/2.2.26?OpenSSL/0.9.8y
Transfer-Encoding:?chunked
Content-Type:?application/json;?charset=UTF-8

{
? ? "success":?false,
? ? "data":?{
? ? ? ? "name":?"Not?Found?Exception",
? ? ? ? "message":?"The?requested?resource?was?not?found.",
? ? ? ? "code":?0,
? ? ? ? "status":?404
? ? }
}
?? ??: ?? ??: