0 追蹤者

類別 yii\web\ErrorHandler

繼承關係yii\web\ErrorHandler » yii\base\ErrorHandler » yii\base\Component » yii\base\BaseObject
實作介面yii\base\Configurable
自版本起可用2.0
原始碼 https://github.com/yiisoft/yii2/blob/master/framework/web/ErrorHandler.php

ErrorHandler 處理未捕獲的 PHP 錯誤和例外。

ErrorHandler 根據錯誤的性質和應用程式運行的模式,使用適當的視圖顯示這些錯誤。

ErrorHandler 預設在 yii\base\Application 中設定為應用程式元件。您可以透過 Yii::$app->errorHandler 存取該實例。

有關 ErrorHandler 的更多詳細資訊和使用方法,請參閱關於處理錯誤的指南文章

公開屬性

隱藏繼承的屬性

屬性 類型 描述 定義於
$behaviors yii\base\Behavior[] 附加到此元件的行為列表。 yii\base\Component
$callStackItemView string 用於呈現例外和錯誤呼叫堆疊元素的視圖檔案路徑。 yii\web\ErrorHandler
$discardExistingOutput boolean 是否在顯示錯誤之前捨棄任何現有的頁面輸出。 yii\base\ErrorHandler
$displayVars array 應在錯誤頁面上顯示的 PHP 預定義變數列表。 yii\web\ErrorHandler
$errorAction string|null 用於顯示外部錯誤的控制器動作路由(例如 site/error)。 yii\web\ErrorHandler
$errorView string 用於呈現不含呼叫堆疊資訊之例外狀況的檢視檔路徑。 yii\web\ErrorHandler
$exception Throwable|null 目前正在處理的例外狀況。 yii\base\ErrorHandler
$exceptionView string 用於呈現例外狀況的檢視檔路徑。 yii\web\ErrorHandler
$maxSourceLines integer 要顯示的最大原始碼行數。 yii\web\ErrorHandler
$maxTraceSourceLines integer 要顯示的最大追蹤原始碼行數。 yii\web\ErrorHandler
$memoryReserveSize integer 保留記憶體的大小。 yii\base\ErrorHandler
$previousExceptionView string 用於呈現先前例外狀況的檢視檔路徑。 yii\web\ErrorHandler
$silentExitOnException boolean 若為 true,handleException() 將以 ExitCode::OK 結束腳本。 yii\base\ErrorHandler
$traceLine string 帶有預留位置的追蹤行,將被替換。 yii\web\ErrorHandler

Public Methods

Hide inherited methods

Method 描述 定義於
__call() 呼叫未作為類別方法的具名方法。 yii\base\Component
__clone() 在透過複製現有物件建立物件後,會呼叫此方法。 yii\base\Component
__construct() 建構子。 yii\base\BaseObject
__get() 傳回組件屬性的值。 yii\base\Component
__isset() 檢查屬性是否已設定,即已定義且非 null。 yii\base\Component
__set() 設定組件屬性的值。 yii\base\Component
__unset() 將組件屬性設定為 null。 yii\base\Component
addTypeLinks() 為給定的 PHP 類型/類別新增資訊連結。 yii\web\ErrorHandler
argumentsToString() 將引數陣列轉換為字串表示形式。 yii\web\ErrorHandler
attachBehavior() 將行為附加到此組件。 yii\base\Component
attachBehaviors() 將行為清單附加到組件。 yii\base\Component
behaviors() 傳回此組件應表現為的行為清單。 yii\base\Component
canGetProperty() 傳回一個值,指示是否可以讀取屬性。 yii\base\Component
canSetProperty() 傳回一個值,指示是否可以設定屬性。 yii\base\Component
className() 傳回此類別的完整限定名稱。 yii\base\BaseObject
clearOutput() 移除在呼叫此方法之前輸出的所有內容。 yii\base\ErrorHandler
convertExceptionToError() 將例外狀況轉換為 PHP 錯誤。 yii\base\ErrorHandler
convertExceptionToString() 將例外狀況轉換為簡單字串。 yii\base\ErrorHandler
convertExceptionToVerboseString() 將例外狀況轉換為包含關於例外狀況及其追蹤之詳細資訊的字串。 yii\base\ErrorHandler
createFrameworkVersionLink() 建立包含 HTML 連結的字串,該連結指向包含目前框架版本和版本號碼文字的頁面。 yii\web\ErrorHandler
createHttpStatusLink() 建立包含連結的 HTML,該連結指向包含給定 HTTP 狀態碼資訊的頁面。 yii\web\ErrorHandler
createServerInformationLink() 建立包含 HTML 連結的字串,該連結指向已判斷的 Web 伺服器軟體首頁及其完整名稱。 yii\web\ErrorHandler
detachBehavior() 從組件分離行為。 yii\base\Component
detachBehaviors() 從組件分離所有行為。 yii\base\Component
ensureBehaviors() 確保在 behaviors() 中宣告的行為已附加到此組件。 yii\base\Component
getBehavior() 傳回具名行為物件。 yii\base\Component
getBehaviors() 傳回附加到此組件的所有行為。 yii\base\Component
getExceptionName() 傳回人類可讀的例外狀況名稱。 yii\web\ErrorHandler
handleError() 處理 PHP 執行錯誤,例如警告和注意事項。 yii\base\ErrorHandler
handleException() 處理未捕獲的 PHP 例外狀況。 yii\base\ErrorHandler
handleFatalError() 處理致命的 PHP 錯誤。 yii\base\ErrorHandler
handleHhvmError() 處理 HHVM 執行錯誤,例如警告和注意事項。 yii\base\ErrorHandler
hasEventHandlers() 傳回一個值,指示是否有任何處理常式附加到具名事件。 yii\base\Component
hasMethod() 傳回一個值,指示是否已定義方法。 yii\base\Component
hasProperty() 傳回一個值,指示是否為此組件定義了屬性。 yii\base\Component
htmlEncode() 將特殊字元轉換為 HTML 實體。 yii\web\ErrorHandler
init() yii\base\ErrorHandler
isCoreFile() 判斷給定的檔案名稱是否屬於框架。 yii\web\ErrorHandler
logException() 記錄給定的例外狀況。 yii\base\ErrorHandler
off() 從此組件分離現有的事件處理常式。 yii\base\Component
on() 將事件處理常式附加到事件。 yii\base\Component
register() 註冊此錯誤處理常式。 yii\base\ErrorHandler
renderCallStack() 呈現呼叫堆疊。 yii\web\ErrorHandler
renderCallStackItem() 呈現單一呼叫堆疊元素。 yii\web\ErrorHandler
renderFile() 將檢視檔呈現為 PHP 腳本。 yii\web\ErrorHandler
renderPreviousExceptions() 呈現給定例外狀況的先前例外狀況堆疊。 yii\web\ErrorHandler
renderRequest() 呈現請求的全域變數。 yii\web\ErrorHandler
trigger() 觸發事件。 yii\base\Component
unregister() 透過還原 PHP 錯誤和例外狀況處理常式,取消註冊此錯誤處理常式。 yii\base\ErrorHandler

Protected Methods

Hide inherited methods

Method 描述 定義於
convertExceptionToArray() 將例外狀況轉換為陣列。 yii\web\ErrorHandler
getTypeUrl() 傳回給定 PHP 類型/類別的資訊連結 URL。 yii\web\ErrorHandler
handleFallbackExceptionMessage() 處理在 handleException() 中的例外狀況處理期間擲回的例外狀況。 yii\base\ErrorHandler
renderException() 呈現例外狀況。 yii\web\ErrorHandler
shouldRenderSimpleHtml() yii\web\ErrorHandler

Events

Hide inherited events

Event 類型 描述 定義於
EVENT_SHUTDOWN yii\base\Event 當處理常式透過 handleFatalError() 由關閉函式呼叫時觸發的事件。(自 2.0.46 版本起可用) yii\base\ErrorHandler

Property Details

隱藏繼承的屬性

$callStackItemView public property

用於呈現例外和錯誤呼叫堆疊元素的視圖檔案路徑。

public string $callStackItemView '@yii/views/errorHandler/callStackItem.php'
$displayVars public property (available since version 2.0.7)

應在錯誤頁面上顯示的 PHP 預定義變數清單。請注意,變數必須可透過 $GLOBALS 存取。否則將不會顯示。預設值為 ['_GET', '_POST', '_FILES', '_COOKIE', '_SESSION']

另請參閱 renderRequest()

public array $displayVars = [
    
'_GET',
    
'_POST',
    
'_FILES',
    
'_COOKIE',
    
'_SESSION',
]
$errorAction public property

用於顯示外部錯誤的控制器動作路由(例如 site/error)。在動作內部,它可以使用 Yii::$app->errorHandler->exception 檢索錯誤資訊。此屬性預設為 null,表示 ErrorHandler 將處理錯誤顯示。

public string|null $errorAction null
$errorView public property

用於呈現不含呼叫堆疊資訊之例外狀況的檢視檔路徑。

public string $errorView '@yii/views/errorHandler/error.php'
$exceptionView public property

用於呈現例外狀況的檢視檔路徑。

public string $exceptionView '@yii/views/errorHandler/exception.php'
$maxSourceLines public property

要顯示的最大原始碼行數。預設值為 19。

$maxTraceSourceLines public property

要顯示的最大追蹤原始碼行數。預設值為 13。

$previousExceptionView public property

用於呈現先前例外狀況的檢視檔路徑。

public string $previousExceptionView '@yii/views/errorHandler/previousException.php'
$traceLine public property (available since version 2.0.14)

帶有預留位置的追蹤行,將被替換。預留位置為 {file}、{line} 和 {text},字串應如下所示。

File: {file} - Line: {line} - Text: {text}

另請參閱 https://github.com/yiisoft/yii2-debug#open-files-in-ide

public string $traceLine '{html}'

Method Details

Hide inherited methods

__call() public method

Defined in: yii\base\Component::__call()

呼叫未作為類別方法的具名方法。

此方法將檢查是否有任何附加的行為具有具名方法,並在可用時執行它。

請勿直接呼叫此方法,因為它是 PHP magic method,當呼叫未知方法時,將會隱含地呼叫它。

public mixed __call ( $name, $params )
$name string

方法名稱

$params array

方法參數

return mixed

方法傳回值

throws yii\base\UnknownMethodException

當呼叫未知方法時

                public function __call($name, $params)
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $object) {
        if ($object->hasMethod($name)) {
            return call_user_func_array([$object, $name], $params);
        }
    }
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__clone() public method

Defined in: yii\base\Component::__clone()

在透過複製現有物件建立物件後,會呼叫此方法。

它會移除所有行為,因為它們附加到舊物件。

public void __clone ( )

                public function __clone()
{
    $this->_events = [];
    $this->_eventWildcards = [];
    $this->_behaviors = null;
}

            
__construct() public method

Defined in: yii\base\BaseObject::__construct()

建構子。

預設實作會執行兩件事

  • 使用給定的組態 $config 初始化物件。
  • 呼叫 init()

如果子類別中覆寫了此方法,建議

  • 建構子的最後一個參數是組態陣列,例如此處的 $config
  • 在建構子的結尾呼叫父類別實作。
public void __construct ( $config = [] )
$config array

將用於初始化物件屬性的名稱-值組

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() public method

Defined in: yii\base\Component::__get()

傳回組件屬性的值。

此方法將依下列順序檢查並採取相應動作

  • getter 定義的屬性:傳回 getter 結果
  • 行為的屬性:傳回行為屬性值

請勿直接呼叫此方法,因為它是 PHP magic method,當執行 $value = $component->property; 時,將會隱含地呼叫它。

另請參閱 __set()

public mixed __get ( $name )
$name string

屬性名稱

return mixed

屬性值或行為屬性的值

throws yii\base\UnknownPropertyException

如果未定義屬性

throws yii\base\InvalidCallException

如果屬性為唯寫。

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        // read property, e.g. getName()
        return $this->$getter();
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name;
        }
    }
    if (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() public method

Defined in: yii\base\Component::__isset()

檢查屬性是否已設定,即已定義且非 null。

此方法將依下列順序檢查並採取相應動作

  • setter 定義的屬性:傳回屬性是否已設定
  • 行為的屬性:傳回屬性是否已設定
  • 針對不存在的屬性傳回 false

請勿直接呼叫此方法,因為它是 PHP magic method,當執行 isset($component->property) 時,將會隱含地呼叫它。

另請參閱 https://php.dev.org.tw/manual/en/function.isset.php

public boolean __isset ( $name )
$name string

屬性名稱或事件名稱

return boolean

具名屬性是否已設定

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name !== null;
        }
    }
    return false;
}

            
__set() public method

Defined in: yii\base\Component::__set()

設定組件屬性的值。

此方法將依下列順序檢查並採取相應動作

  • setter 定義的屬性:設定屬性值
  • 格式為「on xyz」的事件:將處理常式附加到事件「xyz」
  • 格式為「as xyz」的行為:附加名為「xyz」的行為
  • 行為的屬性:設定行為屬性值

請勿直接呼叫此方法,因為它是 PHP magic method,當執行 $component->property = $value; 時,將會隱含地呼叫它。

另請參閱 __get()

public void __set ( $name, $value )
$name string

屬性名稱或事件名稱

$value mixed

屬性值

throws yii\base\UnknownPropertyException

如果未定義屬性

throws yii\base\InvalidCallException

如果屬性為唯讀。

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        // set property
        $this->$setter($value);
        return;
    } elseif (strncmp($name, 'on ', 3) === 0) {
        // on event: attach event handler
        $this->on(trim(substr($name, 3)), $value);
        return;
    } elseif (strncmp($name, 'as ', 3) === 0) {
        // as behavior: attach behavior
        $name = trim(substr($name, 3));
        $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = $value;
            return;
        }
    }
    if (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}

            
__unset() public method

Defined in: yii\base\Component::__unset()

將組件屬性設定為 null。

此方法將依下列順序檢查並採取相應動作

  • setter 定義的屬性:將屬性值設定為 null
  • 行為的屬性:將屬性值設定為 null

請勿直接呼叫此方法,因為它是 PHP magic method,當執行 unset($component->property) 時,將會隱含地呼叫它。

另請參閱 https://php.dev.org.tw/manual/en/function.unset.php

public void __unset ( $name )
$name string

屬性名稱

throws yii\base\InvalidCallException

如果屬性為唯讀。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = null;
            return;
        }
    }
    throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}

            
addTypeLinks() public method

為給定的 PHP 類型/類別新增資訊連結。

public string addTypeLinks ( $code )
$code string

要連結的類型/類別名稱。

return string

使用 HTML 類型/類別名稱連結。

argumentsToString() public method

將引數陣列轉換為字串表示形式。

public string argumentsToString ( $args )
$args array

要轉換的引數陣列

return string

引數陣列的字串表示形式

                public function argumentsToString($args)
{
    $count = 0;
    $isAssoc = $args !== array_values($args);
    foreach ($args as $key => $value) {
        $count++;
        if ($count >= 5) {
            if ($count > 5) {
                unset($args[$key]);
            } else {
                $args[$key] = '...';
            }
            continue;
        }
        if (is_object($value)) {
            $args[$key] = '<span class="title">' . $this->htmlEncode(get_class($value)) . '</span>';
        } elseif (is_bool($value)) {
            $args[$key] = '<span class="keyword">' . ($value ? 'true' : 'false') . '</span>';
        } elseif (is_string($value)) {
            $fullValue = $this->htmlEncode($value);
            if (mb_strlen($value, 'UTF-8') > 32) {
                $displayValue = $this->htmlEncode(mb_substr($value, 0, 32, 'UTF-8')) . '...';
                $args[$key] = "<span class=\"string\" title=\"$fullValue\">'$displayValue'</span>";
            } else {
                $args[$key] = "<span class=\"string\">'$fullValue'</span>";
            }
        } elseif (is_array($value)) {
            $args[$key] = '[' . $this->argumentsToString($value) . ']';
        } elseif ($value === null) {
            $args[$key] = '<span class="keyword">null</span>';
        } elseif (is_resource($value)) {
            $args[$key] = '<span class="keyword">resource</span>';
        } else {
            $args[$key] = '<span class="number">' . $value . '</span>';
        }
        if (is_string($key)) {
            $args[$key] = '<span class="string">\'' . $this->htmlEncode($key) . "'</span> => $args[$key]";
        } elseif ($isAssoc) {
            $args[$key] = "<span class=\"number\">$key</span> => $args[$key]";
        }
    }
    return implode(', ', $args);
}

            
attachBehavior() public method

Defined in: yii\base\Component::attachBehavior()

將行為附加到此組件。

此方法將根據給定的組態建立行為物件。之後,將透過呼叫 yii\base\Behavior::attach() 方法將行為物件附加到此組件。

另請參閱 detachBehavior()

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name string

行為的名稱。

$behavior string|array|yii\base\Behavior

行為組態。這可以是下列其中一項

return yii\base\Behavior

行為物件

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() public method

Defined in: yii\base\Component::attachBehaviors()

將行為清單附加到組件。

每個行為都依其名稱索引,並且應該是 yii\base\Behavior 物件、指定行為類別的字串,或是用於建立行為的組態陣列。

另請參閱 attachBehavior()

public void attachBehaviors ( $behaviors )
$behaviors array

要附加到組件的行為清單

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
behaviors() public method

Defined in: yii\base\Component::behaviors()

傳回此組件應表現為的行為清單。

子類別可以覆寫此方法,以指定它們想要表現為的行為。

此方法的傳回值應該是行為物件或組態的陣列,依行為名稱索引。行為組態可以是指定行為類別的字串,或是下列結構的陣列

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

請注意,行為類別必須繼承自 yii\base\Behavior。行為可以具名或匿名方式附加。當使用名稱作為陣列鍵時,可以使用此名稱,稍後透過 getBehavior() 取得行為,或透過 detachBehavior() 解除附加行為。匿名行為無法被取得或解除附加。

在此方法中宣告的行為將會自動(依需求)附加到元件。

public array behaviors ( )
return array

行為配置。

                public function behaviors()
{
    return [];
}

            
canGetProperty() public 方法

定義於: yii\base\Component::canGetProperty()

傳回一個值,指示是否可以讀取屬性。

如果符合以下條件,屬性即可讀取:

  • 類別具有與指定名稱相關聯的 getter 方法(在此情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數(當 $checkVars 為 true 時);
  • 附加的行為具有給定名稱的可讀屬性(當 $checkBehaviors 為 true 時)。

另請參閱 canSetProperty()

public boolean canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

屬性名稱

$checkVars boolean

是否將成員變數視為屬性

$checkBehaviors boolean

是否將行為的屬性視為此元件的屬性

return boolean

屬性是否可以讀取

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canGetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
canSetProperty() public 方法

定義於: yii\base\Component::canSetProperty()

傳回一個值,指示是否可以設定屬性。

如果符合以下條件,屬性即可寫入:

  • 類別具有與指定名稱相關聯的 setter 方法(在此情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數(當 $checkVars 為 true 時);
  • 附加的行為具有給定名稱的可寫入屬性(當 $checkBehaviors 為 true 時)。

另請參閱 canGetProperty()

public boolean canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

屬性名稱

$checkVars boolean

是否將成員變數視為屬性

$checkBehaviors boolean

是否將行為的屬性視為此元件的屬性

return boolean

屬性是否可以寫入

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canSetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
className() public 靜態方法
自 2.0.14 版本起已過時。在 PHP >=5.5 版本,請改用 ::class

定義於: yii\base\BaseObject::className()

傳回此類別的完整限定名稱。

public static string className ( )
return string

此類別的完整限定名稱。

                public static function className()
{
    return get_called_class();
}

            
clearOutput() public 方法

定義於: yii\base\ErrorHandler::clearOutput()

移除在呼叫此方法之前輸出的所有內容。

public void clearOutput ( )

                public function clearOutput()
{
    // the following manual level counting is to deal with zlib.output_compression set to On
    for ($level = ob_get_level(); $level > 0; --$level) {
        if (!@ob_end_clean()) {
            ob_clean();
        }
    }
}

            
convertExceptionToArray() protected 方法

將例外狀況轉換為陣列。

protected array convertExceptionToArray ( $exception )
$exception Throwable

正在轉換的例外

return array

例外的陣列表示法。

                protected function convertExceptionToArray($exception)
{
    if (!YII_DEBUG && !$exception instanceof UserException && !$exception instanceof HttpException) {
        $exception = new HttpException(500, Yii::t('yii', 'An internal server error occurred.'));
    }
    $array = [
        'name' => ($exception instanceof Exception || $exception instanceof ErrorException) ? $exception->getName() : 'Exception',
        'message' => $exception->getMessage(),
        'code' => $exception->getCode(),
    ];
    if ($exception instanceof HttpException) {
        $array['status'] = $exception->statusCode;
    }
    if (YII_DEBUG) {
        $array['type'] = get_class($exception);
        if (!$exception instanceof UserException) {
            $array['file'] = $exception->getFile();
            $array['line'] = $exception->getLine();
            $array['stack-trace'] = explode("\n", $exception->getTraceAsString());
            if ($exception instanceof \yii\db\Exception) {
                $array['error-info'] = $exception->errorInfo;
            }
        }
    }
    if (($prev = $exception->getPrevious()) !== null) {
        $array['previous'] = $this->convertExceptionToArray($prev);
    }
    return $array;
}

            
convertExceptionToError() public 靜態方法

定義於: yii\base\ErrorHandler::convertExceptionToError()

將例外狀況轉換為 PHP 錯誤。

此方法可用於將方法(如 __toString())內部的例外轉換為 PHP 錯誤,因為例外無法在這些方法內部拋出。

public static never convertExceptionToError ( $exception )
$exception Throwable

要轉換為 PHP 錯誤的例外。

                public static function convertExceptionToError($exception)
{
    trigger_error(static::convertExceptionToString($exception), E_USER_ERROR);
}

            
convertExceptionToString() public 靜態方法

定義於: yii\base\ErrorHandler::convertExceptionToString()

將例外狀況轉換為簡單字串。

public static string convertExceptionToString ( $exception )
$exception Throwable

正在轉換的例外

return string

例外的字串表示法。

                public static function convertExceptionToString($exception)
{
    if ($exception instanceof UserException) {
        return "{$exception->getName()}: {$exception->getMessage()}";
    }
    if (YII_DEBUG) {
        return static::convertExceptionToVerboseString($exception);
    }
    return 'An internal server error occurred.';
}

            
convertExceptionToVerboseString() public 靜態方法 (自 2.0.14 版本起可用)

定義於: yii\base\ErrorHandler::convertExceptionToVerboseString()

將例外狀況轉換為包含關於例外狀況及其追蹤之詳細資訊的字串。

public static string convertExceptionToVerboseString ( $exception )
$exception Throwable

正在轉換的例外

return string

例外的字串表示法。

                public static function convertExceptionToVerboseString($exception)
{
    if ($exception instanceof Exception) {
        $message = "Exception ({$exception->getName()})";
    } elseif ($exception instanceof ErrorException) {
        $message = (string)$exception->getName();
    } else {
        $message = 'Exception';
    }
    $message .= " '" . get_class($exception) . "' with message '{$exception->getMessage()}' \n\nin "
        . $exception->getFile() . ':' . $exception->getLine() . "\n\n"
        . "Stack trace:\n" . $exception->getTraceAsString();
    return $message;
}

            
createFrameworkVersionLink() public 方法

建立包含 HTML 連結的字串,該連結指向包含目前框架版本和版本號碼文字的頁面。

public string createFrameworkVersionLink ( )
return string

框架版本資訊超連結。

createHttpStatusLink() public 方法

建立包含連結的 HTML,該連結指向包含給定 HTTP 狀態碼資訊的頁面。

public string createHttpStatusLink ( $statusCode, $statusDescription )
$statusCode integer

用於產生資訊連結。

$statusDescription string

在狀態碼後顯示的描述。

return string

產生的包含 HTTP 狀態碼資訊的 HTML。

createServerInformationLink() public 方法

建立包含 HTML 連結的字串,該連結指向已判斷的 Web 伺服器軟體首頁及其完整名稱。

public string createServerInformationLink ( )
return string

伺服器軟體資訊超連結。

detachBehavior() public 方法

定義於: yii\base\Component::detachBehavior()

從組件分離行為。

將會調用行為的 yii\base\Behavior::detach() 方法。

public yii\base\Behavior|null detachBehavior ( $name )
$name string

行為的名稱。

return yii\base\Behavior|null

已解除附加的行為。如果行為不存在,則為 Null。

                public function detachBehavior($name)
{
    $this->ensureBehaviors();
    if (isset($this->_behaviors[$name])) {
        $behavior = $this->_behaviors[$name];
        unset($this->_behaviors[$name]);
        $behavior->detach();
        return $behavior;
    }
    return null;
}

            
detachBehaviors() public 方法

定義於: yii\base\Component::detachBehaviors()

從組件分離所有行為。

public void detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
ensureBehaviors() public 方法

定義於: yii\base\Component::ensureBehaviors()

確保在 behaviors() 中宣告的行為已附加到此組件。

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
getBehavior() public 方法

定義於: yii\base\Component::getBehavior()

傳回具名行為物件。

public yii\base\Behavior|null getBehavior ( $name )
$name string

行為名稱

return yii\base\Behavior|null

行為物件,如果行為不存在,則為 null

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() public 方法

定義於: yii\base\Component::getBehaviors()

傳回附加到此組件的所有行為。

public yii\base\Behavior[] getBehaviors ( )
return yii\base\Behavior[]

附加到此元件的行為列表

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
getExceptionName() public 方法

傳回人類可讀的例外狀況名稱。

public string|null getExceptionName ( $exception )
$exception Throwable
return string|null

人類可讀的例外名稱,如果無法判斷則為 null

                public function getExceptionName($exception)
{
    if ($exception instanceof \yii\base\Exception || $exception instanceof \yii\base\InvalidCallException || $exception instanceof \yii\base\InvalidParamException || $exception instanceof \yii\base\UnknownMethodException) {
        return $exception->getName();
    }
    return null;
}

            
getTypeUrl() protected 方法

傳回給定 PHP 類型/類別的資訊連結 URL。

另請參閱 addTypeLinks()

protected string|null getTypeUrl ( $class, $method )
$class string

類型或類別名稱。

$method string|null

方法名稱。

return string|null

資訊連結 URL。

                protected function getTypeUrl($class, $method)
{
    if (strncmp($class, 'yii\\', 4) !== 0) {
        return null;
    }
    $page = $this->htmlEncode(strtolower(str_replace('\\', '-', $class)));
    $url = "https://yii.dev.org.tw/doc-2.0/$page.html";
    if ($method) {
        $url .= "#$method()-detail";
    }
    return $url;
}

            
handleError() public 方法

定義於: yii\base\ErrorHandler::handleError()

處理 PHP 執行錯誤,例如警告和注意事項。

此方法用作 PHP 錯誤處理器。它將簡單地引發一個 yii\base\ErrorException

public boolean handleError ( $code, $message, $file, $line )
$code integer

引發錯誤的級別。

$message string

錯誤訊息。

$file string

引發錯誤的檔案名稱。

$line integer

引發錯誤的行號。

return boolean

一般錯誤處理器是否繼續執行。

throws yii\base\ErrorException

                public function handleError($code, $message, $file, $line)
{
    if (error_reporting() & $code) {
        // load ErrorException manually here because autoloading them will not work
        // when error occurs while autoloading a class
        if (!class_exists('yii\\base\\ErrorException', false)) {
            require_once __DIR__ . '/ErrorException.php';
        }
        $exception = new ErrorException($message, $code, $code, $file, $line);
        if (PHP_VERSION_ID < 70400) {
            // prior to PHP 7.4 we can't throw exceptions inside of __toString() - it will result a fatal error
            $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
            array_shift($trace);
            foreach ($trace as $frame) {
                if ($frame['function'] === '__toString') {
                    $this->handleException($exception);
                    if (defined('HHVM_VERSION')) {
                        flush();
                    }
                    exit(1);
                }
            }
        }
        throw $exception;
    }
    return false;
}

            
handleException() public 方法

定義於: yii\base\ErrorHandler::handleException()

處理未捕獲的 PHP 例外狀況。

此方法實作為 PHP 例外處理器。

public void handleException ( $exception )
$exception Throwable

未捕獲的例外

                public function handleException($exception)
{
    if ($exception instanceof ExitException) {
        return;
    }
    $this->exception = $exception;
    // disable error capturing to avoid recursive errors while handling exceptions
    $this->unregister();
    // set preventive HTTP status code to 500 in case error handling somehow fails and headers are sent
    // HTTP exceptions will override this value in renderException()
    if (PHP_SAPI !== 'cli') {
        http_response_code(500);
    }
    try {
        $this->logException($exception);
        if ($this->discardExistingOutput) {
            $this->clearOutput();
        }
        $this->renderException($exception);
        if (!$this->silentExitOnException) {
            \Yii::getLogger()->flush(true);
            if (defined('HHVM_VERSION')) {
                flush();
            }
            exit(1);
        }
    } catch (\Exception $e) {
        // an other exception could be thrown while displaying the exception
        $this->handleFallbackExceptionMessage($e, $exception);
    } catch (\Throwable $e) {
        // additional check for \Throwable introduced in PHP 7
        $this->handleFallbackExceptionMessage($e, $exception);
    }
    $this->exception = null;
}

            
handleFallbackExceptionMessage() protected 方法 (自 2.0.11 版本起可用)

定義於: yii\base\ErrorHandler::handleFallbackExceptionMessage()

處理在 handleException() 中的例外狀況處理期間擲回的例外狀況。

protected void handleFallbackExceptionMessage ( $exception, $previousException )
$exception Throwable

在主要例外處理期間拋出的例外。

$previousException Throwable

handleException() 中處理的主要例外。

                protected function handleFallbackExceptionMessage($exception, $previousException)
{
    $msg = "An Error occurred while handling another error:\n";
    $msg .= (string) $exception;
    $msg .= "\nPrevious exception:\n";
    $msg .= (string) $previousException;
    if (YII_DEBUG) {
        if (PHP_SAPI === 'cli') {
            echo $msg . "\n";
        } else {
            echo '<pre>' . htmlspecialchars($msg, ENT_QUOTES, Yii::$app->charset) . '</pre>';
        }
        $msg .= "\n\$_SERVER = " . VarDumper::export($_SERVER);
    } else {
        echo 'An internal server error occurred.';
    }
    error_log($msg);
    if (defined('HHVM_VERSION')) {
        flush();
    }
    exit(1);
}

            
handleFatalError() public 方法

定義於: yii\base\ErrorHandler::handleFatalError()

處理致命的 PHP 錯誤。

public void handleFatalError ( )

                public function handleFatalError()
{
    unset($this->_memoryReserve);
    if (isset($this->_workingDirectory)) {
        // fix working directory for some Web servers e.g. Apache
        chdir($this->_workingDirectory);
        // flush memory
        unset($this->_workingDirectory);
    }
    $error = error_get_last();
    if ($error === null) {
        return;
    }
    // load ErrorException manually here because autoloading them will not work
    // when error occurs while autoloading a class
    if (!class_exists('yii\\base\\ErrorException', false)) {
        require_once __DIR__ . '/ErrorException.php';
    }
    if (!ErrorException::isFatalError($error)) {
        return;
    }
    if (!empty($this->_hhvmException)) {
        $this->exception = $this->_hhvmException;
    } else {
        $this->exception = new ErrorException(
            $error['message'],
            $error['type'],
            $error['type'],
            $error['file'],
            $error['line']
        );
    }
    unset($error);
    $this->logException($this->exception);
    if ($this->discardExistingOutput) {
        $this->clearOutput();
    }
    $this->renderException($this->exception);
    // need to explicitly flush logs because exit() next will terminate the app immediately
    Yii::getLogger()->flush(true);
    if (defined('HHVM_VERSION')) {
        flush();
    }
    $this->trigger(static::EVENT_SHUTDOWN);
    // ensure it is called after user-defined shutdown functions
    register_shutdown_function(function () {
        exit(1);
    });
}

            
handleHhvmError() public 方法 (自 2.0.6 版本起可用)

定義於: yii\base\ErrorHandler::handleHhvmError()

處理 HHVM 執行錯誤,例如警告和注意事項。

此方法用作 HHVM 錯誤處理器。它將儲存將在嚴重錯誤處理器中使用的例外

public boolean handleHhvmError ( $code, $message, $file, $line, $context, $backtrace )
$code integer

引發錯誤的級別。

$message string

錯誤訊息。

$file string

引發錯誤的檔案名稱。

$line integer

引發錯誤的行號。

$context mixed
$backtrace mixed

錯誤追蹤

return boolean

一般錯誤處理器是否繼續執行。

throws yii\base\ErrorException

                public function handleHhvmError($code, $message, $file, $line, $context, $backtrace)
{
    if ($this->handleError($code, $message, $file, $line)) {
        return true;
    }
    if (E_ERROR & $code) {
        $exception = new ErrorException($message, $code, $code, $file, $line);
        $ref = new \ReflectionProperty('\Exception', 'trace');
        $ref->setAccessible(true);
        $ref->setValue($exception, $backtrace);
        $this->_hhvmException = $exception;
    }
    return false;
}

            
hasEventHandlers() public 方法

定義於: yii\base\Component::hasEventHandlers()

傳回一個值,指示是否有任何處理常式附加到具名事件。

public boolean hasEventHandlers ( $name )
$name string

事件名稱

return boolean

是否有任何處理器附加到事件。

                public function hasEventHandlers($name)
{
    $this->ensureBehaviors();
    if (!empty($this->_events[$name])) {
        return true;
    }
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
            return true;
        }
    }
    return Event::hasHandlers($this, $name);
}

            
hasMethod() public 方法

定義於: yii\base\Component::hasMethod()

傳回一個值,指示是否已定義方法。

如果符合以下條件,則定義了方法:

  • 類別具有具有指定名稱的方法
  • 附加的行為具有給定名稱的方法(當 $checkBehaviors 為 true 時)。
public boolean hasMethod ( $name, $checkBehaviors true )
$name string

屬性名稱

$checkBehaviors boolean

是否將行為的方法視為此元件的方法

return boolean

方法是否已定義

                public function hasMethod($name, $checkBehaviors = true)
{
    if (method_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->hasMethod($name)) {
                return true;
            }
        }
    }
    return false;
}

            
hasProperty() public 方法

定義於: yii\base\Component::hasProperty()

傳回一個值,指示是否為此組件定義了屬性。

如果符合以下條件,則定義了屬性:

  • 類別具有與指定名稱相關聯的 getter 或 setter 方法(在此情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數(當 $checkVars 為 true 時);
  • 附加的行為具有給定名稱的屬性(當 $checkBehaviors 為 true 時)。

另請參閱

public boolean hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

屬性名稱

$checkVars boolean

是否將成員變數視為屬性

$checkBehaviors boolean

是否將行為的屬性視為此元件的屬性

return boolean

屬性是否已定義

                public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
    return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}

            
htmlEncode() public 方法

將特殊字元轉換為 HTML 實體。

public string htmlEncode ( $text )
$text string

要編碼的文字。

return string

編碼後的原始文字。

                public function htmlEncode($text)
{
    return htmlspecialchars($text, ENT_NOQUOTES | ENT_SUBSTITUTE | ENT_HTML5, 'UTF-8');
}

            
init() public 方法
public void init ( )

                public function init()
{
    $this->silentExitOnException = $this->silentExitOnException !== null ? $this->silentExitOnException : YII_ENV_TEST;
    parent::init();
}

            
isCoreFile() public method

判斷給定的檔案名稱是否屬於框架。

public boolean isCoreFile ( $file )
$file string

要檢查的名稱。

return boolean

判斷給定的檔案名稱是否屬於框架。

                public function isCoreFile($file)
{
    return $file === null || strpos(realpath($file), YII2_PATH . DIRECTORY_SEPARATOR) === 0;
}

            
logException() public method

定義於: yii\base\ErrorHandler::logException()

記錄給定的例外狀況。

public void logException ( $exception )
$exception Throwable

要記錄的例外。

版本 描述
2.0.3 此方法現在為 public。

                public function logException($exception)
{
    $category = get_class($exception);
    if ($exception instanceof HttpException) {
        $category = 'yii\\web\\HttpException:' . $exception->statusCode;
    } elseif ($exception instanceof \ErrorException) {
        $category .= ':' . $exception->getSeverity();
    }
    Yii::error($exception, $category);
}

            
off() public method

定義於: yii\base\Component::off()

從此組件分離現有的事件處理常式。

此方法與 on() 相反。

注意:若為事件名稱傳遞了萬用字元模式,則僅會移除以該萬用字元註冊的處理器,而以符合該萬用字元的純名稱註冊的處理器將會保留。

另請參閱 on()

public boolean off ( $name, $handler null )
$name string

事件名稱

$handler callable|null

要移除的事件處理器。若為 null,則會移除附加到具名事件的所有處理器。

return boolean

若找到並分離處理器

                public function off($name, $handler = null)
{
    $this->ensureBehaviors();
    if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
        return false;
    }
    if ($handler === null) {
        unset($this->_events[$name], $this->_eventWildcards[$name]);
        return true;
    }
    $removed = false;
    // plain event names
    if (isset($this->_events[$name])) {
        foreach ($this->_events[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_events[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_events[$name] = array_values($this->_events[$name]);
            return true;
        }
    }
    // wildcard event names
    if (isset($this->_eventWildcards[$name])) {
        foreach ($this->_eventWildcards[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_eventWildcards[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
            // remove empty wildcards to save future redundant regex checks:
            if (empty($this->_eventWildcards[$name])) {
                unset($this->_eventWildcards[$name]);
            }
        }
    }
    return $removed;
}

            
on() public method

定義於: yii\base\Component::on()

將事件處理常式附加到事件。

事件處理器必須是有效的 PHP 回呼。以下是一些範例

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

事件處理器必須以以下簽章定義:

function ($event)

其中 $event 是一個 yii\base\Event 物件,其中包含與事件相關聯的參數。

自 2.0.14 版起,您可以將事件名稱指定為萬用字元模式

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

另請參閱 off()

public void on ( $name, $handler, $data null, $append true )
$name string

事件名稱

$handler callable

事件處理器

$data mixed

在觸發事件時要傳遞給事件處理器的資料。當呼叫事件處理器時,可以透過 yii\base\Event::$data 存取此資料。

$append boolean

是否將新的事件處理器附加到現有處理器清單的末尾。若為 false,則新的處理器將插入到現有處理器清單的開頭。

                public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if (strpos($name, '*') !== false) {
        if ($append || empty($this->_eventWildcards[$name])) {
            $this->_eventWildcards[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_eventWildcards[$name], [$handler, $data]);
        }
        return;
    }
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}

            
register() public method

定義於: yii\base\ErrorHandler::register()

註冊此錯誤處理常式。

public void register ( )
版本 描述
2.0.32 若已註冊錯誤處理器,則此操作不會執行任何動作

                public function register()
{
    if (!$this->_registered) {
        ini_set('display_errors', false);
        set_exception_handler([$this, 'handleException']);
        if (defined('HHVM_VERSION')) {
            set_error_handler([$this, 'handleHhvmError']);
        } else {
            set_error_handler([$this, 'handleError']);
        }
        if ($this->memoryReserveSize > 0) {
            $this->_memoryReserve = str_repeat('x', $this->memoryReserveSize);
        }
        // to restore working directory in shutdown handler
        if (PHP_SAPI !== 'cli') {
            $this->_workingDirectory = getcwd();
        }
        register_shutdown_function([$this, 'handleFatalError']);
        $this->_registered = true;
    }
}

            
renderCallStack() public method (自版本 2.0.12 起可用)

呈現呼叫堆疊。

public string renderCallStack ( $exception )
$exception Throwable

要從中取得呼叫堆疊的例外。

return string

已呈現呼叫堆疊的 HTML 內容。

                public function renderCallStack($exception)
{
    $out = '<ul>';
    $out .= $this->renderCallStackItem($exception->getFile(), $exception->getLine(), null, null, [], 1);
    for ($i = 0, $trace = $exception->getTrace(), $length = count($trace); $i < $length; ++$i) {
        $file = !empty($trace[$i]['file']) ? $trace[$i]['file'] : null;
        $line = !empty($trace[$i]['line']) ? $trace[$i]['line'] : null;
        $class = !empty($trace[$i]['class']) ? $trace[$i]['class'] : null;
        $function = null;
        if (!empty($trace[$i]['function']) && $trace[$i]['function'] !== 'unknown') {
            $function = $trace[$i]['function'];
        }
        $args = !empty($trace[$i]['args']) ? $trace[$i]['args'] : [];
        $out .= $this->renderCallStackItem($file, $line, $class, $function, $args, $i + 2);
    }
    $out .= '</ul>';
    return $out;
}

            
renderCallStackItem() public method

呈現單一呼叫堆疊元素。

public string renderCallStackItem ( $file, $line, $class, $method, $args, $index )
$file string|null

呼叫發生的名稱。

$line integer|null

呼叫發生的行號。

$class string|null

呼叫的類別名稱。

$method string|null

呼叫的函式/方法名稱。

$args array

方法引數陣列。

$index integer

呼叫堆疊元素的編號。

return string

已呈現呼叫堆疊元素的 HTML 內容。

                public function renderCallStackItem($file, $line, $class, $method, $args, $index)
{
    $lines = [];
    $begin = $end = 0;
    if ($file !== null && $line !== null) {
        $line--; // adjust line number from one-based to zero-based
        $lines = @file($file);
        if ($line < 0 || $lines === false || ($lineCount = count($lines)) < $line) {
            return '';
        }
        $half = (int) (($index === 1 ? $this->maxSourceLines : $this->maxTraceSourceLines) / 2);
        $begin = $line - $half > 0 ? $line - $half : 0;
        $end = $line + $half < $lineCount ? $line + $half : $lineCount - 1;
    }
    return $this->renderFile($this->callStackItemView, [
        'file' => $file,
        'line' => $line,
        'class' => $class,
        'method' => $method,
        'index' => $index,
        'lines' => $lines,
        'begin' => $begin,
        'end' => $end,
        'args' => $args,
    ]);
}

            
renderException() protected method

呈現例外狀況。

protected void renderException ( $exception )
$exception Throwable

要呈現的例外。

                protected function renderException($exception)
{
    if (Yii::$app->has('response')) {
        $response = Yii::$app->getResponse();
        // reset parameters of response to avoid interference with partially created response data
        // in case the error occurred while sending the response.
        $response->isSent = false;
        $response->stream = null;
        $response->data = null;
        $response->content = null;
    } else {
        $response = new Response();
    }
    $response->setStatusCodeByException($exception);
    $useErrorView = $response->format === Response::FORMAT_HTML && (!YII_DEBUG || $exception instanceof UserException);
    if ($useErrorView && $this->errorAction !== null) {
        Yii::$app->view->clear();
        $result = Yii::$app->runAction($this->errorAction);
        if ($result instanceof Response) {
            $response = $result;
        } else {
            $response->data = $result;
        }
    } elseif ($response->format === Response::FORMAT_HTML) {
        if ($this->shouldRenderSimpleHtml()) {
            // AJAX request
            $response->data = '<pre>' . $this->htmlEncode(static::convertExceptionToString($exception)) . '</pre>';
        } else {
            // if there is an error during error rendering it's useful to
            // display PHP error in debug mode instead of a blank screen
            if (YII_DEBUG) {
                ini_set('display_errors', 1);
            }
            $file = $useErrorView ? $this->errorView : $this->exceptionView;
            $response->data = $this->renderFile($file, [
                'exception' => $exception,
            ]);
        }
    } elseif ($response->format === Response::FORMAT_RAW) {
        $response->data = static::convertExceptionToString($exception);
    } else {
        $response->data = $this->convertExceptionToArray($exception);
    }
    $response->send();
}

            
renderFile() public method

將檢視檔呈現為 PHP 腳本。

public string renderFile ( $_file_, $_params_ )
$_file_ string

檢視檔案。

$_params_ array

將被提取並在檢視檔案中可用的參數(名稱-值組)。

return string

呈現結果

                public function renderFile($_file_, $_params_)
{
    $_params_['handler'] = $this;
    if ($this->exception instanceof ErrorException || !Yii::$app->has('view')) {
        ob_start();
        ob_implicit_flush(false);
        extract($_params_, EXTR_OVERWRITE);
        require Yii::getAlias($_file_);
        return ob_get_clean();
    }
    $view = Yii::$app->getView();
    $view->clear();
    return $view->renderFile($_file_, $_params_, $this);
}

            
renderPreviousExceptions() public method

呈現給定例外狀況的先前例外狀況堆疊。

public string renderPreviousExceptions ( $exception )
$exception Throwable

應呈現其前導例外的例外。

return string

已呈現先前例外的 HTML 內容。若無,則為空字串。

                public function renderPreviousExceptions($exception)
{
    if (($previous = $exception->getPrevious()) !== null) {
        return $this->renderFile($this->previousExceptionView, ['exception' => $previous]);
    }
    return '';
}

            
renderRequest() public method

呈現請求的全域變數。

全域變數清單定義於 $displayVars

另請參閱 $displayVars

public string renderRequest ( )
return string

呈現結果

                public function renderRequest()
{
    $request = '';
    foreach ($this->displayVars as $name) {
        if (!empty($GLOBALS[$name])) {
            $request .= '$' . $name . ' = ' . VarDumper::export($GLOBALS[$name]) . ";\n\n";
        }
    }
    return '<pre>' . $this->htmlEncode(rtrim($request, "\n")) . '</pre>';
}

            
shouldRenderSimpleHtml() protected method (自版本 2.0.12 起可用)

protected boolean shouldRenderSimpleHtml ( )
return boolean

是否應呈現簡單 HTML

                protected function shouldRenderSimpleHtml()
{
    return YII_ENV_TEST || Yii::$app->request->getIsAjax();
}

            
trigger() public method

定義於: yii\base\Component::trigger()

觸發事件。

此方法代表事件的發生。它會針對事件呼叫所有附加的處理器,包括類別層級的處理器。

public void trigger ( $name, yii\base\Event $event null )
$name string

事件名稱

$event yii\base\Event|null

事件實例。若未設定,將會建立預設的 yii\base\Event 物件。

                public function trigger($name, Event $event = null)
{
    $this->ensureBehaviors();
    $eventHandlers = [];
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (StringHelper::matchWildcard($wildcard, $name)) {
            $eventHandlers[] = $handlers;
        }
    }
    if (!empty($this->_events[$name])) {
        $eventHandlers[] = $this->_events[$name];
    }
    if (!empty($eventHandlers)) {
        $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
        if ($event === null) {
            $event = new Event();
        }
        if ($event->sender === null) {
            $event->sender = $this;
        }
        $event->handled = false;
        $event->name = $name;
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            // stop further handling if the event is handled
            if ($event->handled) {
                return;
            }
        }
    }
    // invoke class-level attached handlers
    Event::trigger($this, $name, $event);
}

            
unregister() public method

定義於: yii\base\ErrorHandler::unregister()

透過還原 PHP 錯誤和例外狀況處理常式,取消註冊此錯誤處理常式。

public void unregister ( )
版本 描述
2.0.32 若未註冊錯誤處理器,則此操作不會執行任何動作

                public function unregister()
{
    if ($this->_registered) {
        $this->_memoryReserve = null;
        $this->_workingDirectory = null;
        restore_error_handler();
        restore_exception_handler();
        $this->_registered = false;
    }
}