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