[Beeframework-svn] SF.net SVN: beeframework:[159] trunk/framework/Bee/MVC
Brought to you by:
b_hartmann,
m_plomer
|
From: <m_p...@us...> - 2014-07-01 16:05:06
|
Revision: 159
http://sourceforge.net/p/beeframework/code/159
Author: m_plomer
Date: 2014-07-01 16:04:58 +0000 (Tue, 01 Jul 2014)
Log Message:
-----------
- MVC/Views: extended Redirect view
Modified Paths:
--------------
trunk/framework/Bee/MVC/IHandlerExceptionResolver.php
trunk/framework/Bee/MVC/SimpleMappingExceptionResolver.php
Modified: trunk/framework/Bee/MVC/IHandlerExceptionResolver.php
===================================================================
--- trunk/framework/Bee/MVC/IHandlerExceptionResolver.php 2014-07-01 15:18:20 UTC (rev 158)
+++ trunk/framework/Bee/MVC/IHandlerExceptionResolver.php 2014-07-01 16:04:58 UTC (rev 159)
@@ -25,6 +25,4 @@
* @return Bee_MVC_ModelAndView
*/
public function resolveException(Bee_MVC_IHttpRequest $request, Bee_MVC_IController $handler = null, Exception $ex);
-
}
-?>
\ No newline at end of file
Modified: trunk/framework/Bee/MVC/SimpleMappingExceptionResolver.php
===================================================================
--- trunk/framework/Bee/MVC/SimpleMappingExceptionResolver.php 2014-07-01 15:18:20 UTC (rev 158)
+++ trunk/framework/Bee/MVC/SimpleMappingExceptionResolver.php 2014-07-01 16:04:58 UTC (rev 159)
@@ -1,4 +1,5 @@
<?php
+
/*
* Copyright 2008-2010 the original author or authors.
*
@@ -16,40 +17,45 @@
*/
class Bee_MVC_SimpleMappingExceptionResolver implements Bee_MVC_IHandlerExceptionResolver {
-
+
const MODEL_HANDLER_EXCEPTION_KEY = 'handler_excpetion';
-
+
/**
- *
+ *
* @var array
*/
private $exceptionMapping;
-
+
/**
- *
+ *
* @var String
*/
private $defaultErrorView;
-
+
/**
- *
+ * @var string
+ */
+ private $ajaxViewNameSuffix = '.ajax';
+
+ /**
+ *
* @return array
*/
public final function getExceptionMapping() {
return $this->exceptionMapping;
}
-
+
/**
- *
+ *
* @param array $exceptionMapping
* @return void
*/
public final function setExceptionMapping(array $exceptionMapping) {
$this->exceptionMapping = $exceptionMapping;
}
-
+
/**
- *
+ *
* @return String
*/
public final function getDefaultErrorView() {
@@ -57,7 +63,7 @@
}
/**
- *
+ *
* @param String $defaultErrorView
* @return void
*/
@@ -65,24 +71,54 @@
$this->defaultErrorView = $defaultErrorView;
}
+ /**
+ * @param Bee_MVC_IHttpRequest $request
+ * @param Bee_MVC_IController $handler
+ * @param Exception $ex
+ * @return Bee_MVC_ModelAndView|bool
+ */
public function resolveException(Bee_MVC_IHttpRequest $request, Bee_MVC_IController $handler = null, Exception $ex) {
- $exceptionClass = get_class($ex);
+
$viewName = false;
- if(is_array($this->exceptionMapping) && array_key_exists($exceptionClass, $this->exceptionMapping)) {
- $viewName = $this->exceptionMapping[$exceptionClass];
+
+ // can the mapping be resolved directly?
+ if (is_array($this->exceptionMapping)) {
+ $exceptionClass = get_class($ex);
+ // can the mapping be resolved directly?
+ if (array_key_exists($exceptionClass, $this->exceptionMapping)) {
+ $viewName = $this->exceptionMapping[$exceptionClass];
+ } else {
+ // try to find a mapping for a superclass
+ foreach ($this->exceptionMapping as $parentClass => $mappedSolution) {
+ if (is_subclass_of($exceptionClass, $parentClass)) {
+ $viewName = $mappedSolution;
+ break;
+ }
+ }
+ }
}
- if(!$viewName && Bee_Utils_Strings::hasText($this->defaultErrorView)) {
+
+ if (!$viewName && Bee_Utils_Strings::hasText($this->defaultErrorView)) {
$viewName = $this->defaultErrorView;
}
-
- if($viewName) {
- $model = array(
- self::MODEL_HANDLER_EXCEPTION_KEY => $ex
- );
- return new Bee_MVC_ModelAndView($model, $viewName);
- }
- return false;
+
+ return $viewName ? new Bee_MVC_ModelAndView(array(self::MODEL_HANDLER_EXCEPTION_KEY => $ex), $this->modifyResolvedViewName($viewName, $request)) : false;
}
-
+
+ /**
+ * @param $viewName
+ * @param Bee_MVC_IHttpRequest $request
+ * @return string
+ */
+ protected function modifyResolvedViewName($viewName, Bee_MVC_IHttpRequest $request) {
+ return $this->isAjaxRequest($request) ? $viewName . $this->ajaxViewNameSuffix : $viewName;
+ }
+
+ /**
+ * @param Bee_MVC_IHttpRequest $request
+ * @return bool
+ */
+ protected function isAjaxRequest(Bee_MVC_IHttpRequest $request) {
+ return $request->getHeader('X-Requested-With') == 'XMLHttpRequest';
+ }
}
-?>
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|