diff --git a/framework/yii/YiiBase.php b/framework/yii/YiiBase.php index 4f85cae..ee75822 100644 --- a/framework/yii/YiiBase.php +++ b/framework/yii/YiiBase.php @@ -6,7 +6,6 @@ */ namespace yii; -use yii\base\Arrayable; use yii\base\Exception; use yii\base\InvalidConfigException; use yii\base\InvalidParamException; @@ -624,6 +623,19 @@ class YiiBase $object->$name = $value; } } + + /** + * Returns the public member variables of an object. + * This method is provided such that we can get the public member variables of an object. + * It is different from "get_object_vars()" because the latter will return private + * and protected variables if it is called within the object itself. + * @param object $object the object to be handled + * @return array the public member variables of the object + */ + public static function getObjectVars($object) + { + return get_object_vars($object); + } } YiiBase::$aliases = array( diff --git a/framework/yii/base/ErrorHandler.php b/framework/yii/base/ErrorHandler.php index 1e6671b..338a392 100644 --- a/framework/yii/base/ErrorHandler.php +++ b/framework/yii/base/ErrorHandler.php @@ -90,6 +90,8 @@ class ErrorHandler extends Component $useErrorView = !YII_DEBUG || $exception instanceof UserException; $response = Yii::$app->getResponse(); + $response->getHeaders()->removeAll(); + if ($useErrorView && $this->errorAction !== null) { $result = Yii::$app->runAction($this->errorAction); if ($result instanceof Response) { diff --git a/framework/yii/base/Exception.php b/framework/yii/base/Exception.php index fe497a7..4f66e53 100644 --- a/framework/yii/base/Exception.php +++ b/framework/yii/base/Exception.php @@ -29,11 +29,34 @@ class Exception extends \Exception implements Arrayable */ public function toArray() { - return array( - 'type' => get_class($this), - 'name' => $this->getName(), - 'message' => $this->getMessage(), - 'code' => $this->getCode(), - ); + return $this->toArrayRecursive($this); + } + + /** + * Returns the array representation of the exception and all previous exceptions recursively. + * @param \Exception exception object + * @return array the array representation of the exception. + */ + protected function toArrayRecursive($exception) + { + if ($exception instanceof self) { + $array = array( + 'type' => get_class($this), + 'name' => $this->getName(), + 'message' => $this->getMessage(), + 'code' => $this->getCode(), + ); + } else { + $array = array( + 'type' => get_class($exception), + 'name' => 'Exception', + 'message' => $exception->getMessage(), + 'code' => $exception->getCode(), + ); + } + if (($prev = $exception->getPrevious()) !== null) { + $array['previous'] = $this->toArrayRecursive($prev); + } + return $array; } } diff --git a/framework/yii/base/Object.php b/framework/yii/base/Object.php index b7ab710..7724008 100644 --- a/framework/yii/base/Object.php +++ b/framework/yii/base/Object.php @@ -8,7 +8,6 @@ namespace yii\base; use Yii; -use yii\helpers\ArrayHelper; /** * @include @yii/base/Object.md @@ -223,11 +222,10 @@ class Object implements Arrayable /** * Converts the object into an array. * The default implementation will return all public property values as an array. - * However, if the object is traversable, it will return the data obtained by the data iteration. * @return array the array representation of the object */ public function toArray() { - return ArrayHelper::toArray($this, false); + return Yii::getObjectVars($this); } }