[Beeframework-svn] SF.net SVN: beeframework:[174] trunk
Brought to you by:
b_hartmann,
m_plomer
|
From: <m_p...@us...> - 2014-07-08 16:41:35
|
Revision: 174
http://sourceforge.net/p/beeframework/code/174
Author: m_plomer
Date: 2014-07-08 16:41:30 +0000 (Tue, 08 Jul 2014)
Log Message:
-----------
- MVC: parametrized URL patterns done
Modified Paths:
--------------
trunk/examples/classes/Test/Mvc/ParamTestDelegate.php
trunk/examples/index.php
trunk/framework/Bee/MVC/Controller/MultiActionController.php
trunk/framework/Bee/MVC/Controller/Multiaction/AbstractAnnotationBasedResolver.php
trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/AnnotationBasedInvocator.php
trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/IInvocationResolver.php
trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/RegexMappingInvocationResolver.php
trunk/framework/Bee/MVC/Controller/Multiaction/RequestHandler.php
Added Paths:
-----------
trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/HandlerMethodMetadata.php
trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/MethodInvocation.php
trunk/framework/Bee/MVC/Controller/Multiaction/NoHandlerMethodFoundException.php
trunk/framework/Bee/MVC/Controller/Multiaction/RequestHandlerMapping.php
Modified: trunk/examples/classes/Test/Mvc/ParamTestDelegate.php
===================================================================
--- trunk/examples/classes/Test/Mvc/ParamTestDelegate.php 2014-07-08 09:52:40 UTC (rev 173)
+++ trunk/examples/classes/Test/Mvc/ParamTestDelegate.php 2014-07-08 16:41:30 UTC (rev 174)
@@ -2,7 +2,8 @@
namespace Test\Mvc;
use Bee_MVC_IHttpRequest;
-use Test\MiscClass;
+use Bee_MVC_ModelAndView;
+use Test\MiscClass as MC;
/**
@@ -13,20 +14,30 @@
/**
*
- * @Bee_MVC_Controller_Multiaction_RequestHandler(httpMethod = "GET", pathPattern = "/**\/testParam/{paramA}/{paramB}")
+ * @param int $paramA
+ * @param Bee_MVC_IHttpRequest $request
+ * @param MC $paramB
+ * @param boolean $boolParam
+ * @param MC $testParam
+ * @param boolean $getParam
+ * @return bool
+ * @Bee_MVC_Controller_Multiaction_RequestHandler(httpMethod = "GET", pathPattern = "/**\/testParam/{0}/{2}/{boolParam}")
*/
- public function handleTestParams($paramA, MiscClass $paramB, Bee_MVC_IHttpRequest $request) {
+ public function handleTestParams($paramA, Bee_MVC_IHttpRequest $request, MC $paramB, $boolParam = false, $testParam = null, $getParam = false) {
var_dump($paramA);
var_dump($paramB);
var_dump($request);
- return true;
+ var_dump($boolParam);
+ var_dump($testParam);
+ var_dump($getParam);
+ return new Bee_MVC_ModelAndView(array('paramA' => $paramA, 'paramB' => $paramB, 'boolParam' => $boolParam), 'testview');
}
/**
*
* @Bee_MVC_Controller_Multiaction_RequestHandler(httpMethod = "GET", pathPattern = "/**\/testParam/{paramA}/")
*/
- public function handleTestParams2(MiscClass $paramB, Bee_MVC_IHttpRequest $request) {
+ public function handleTestParams2(MC $paramB, Bee_MVC_IHttpRequest $request) {
var_dump($paramB);
var_dump($request);
return true;
Modified: trunk/examples/index.php
===================================================================
--- trunk/examples/index.php 2014-07-08 09:52:40 UTC (rev 173)
+++ trunk/examples/index.php 2014-07-08 16:41:30 UTC (rev 174)
@@ -10,4 +10,5 @@
Bee_Cache_Manager::init();
+//Bee_Framework::setProductionMode(true);
Bee_Framework::dispatchRequestUsingXmlContext(__DIR__.'/conf/context-mvc.xml');
\ No newline at end of file
Modified: trunk/framework/Bee/MVC/Controller/MultiActionController.php
===================================================================
--- trunk/framework/Bee/MVC/Controller/MultiActionController.php 2014-07-08 09:52:40 UTC (rev 173)
+++ trunk/framework/Bee/MVC/Controller/MultiActionController.php 2014-07-08 16:41:30 UTC (rev 174)
@@ -17,6 +17,7 @@
*/
use Bee\MVC\Controller\Multiaction\IHandlerMethodInvocator;
use Bee\MVC\Controller\Multiaction\IMethodNameResolver;
+use Bee\MVC\Controller\Multiaction\NoHandlerMethodFoundException;
use Bee_MVC_IHttpRequest;
use Bee_Utils_Assert;
use Bee_Utils_Reflection;
@@ -95,7 +96,7 @@
// @todo: this might pose a security risk. introduce a set of allowed method names
$method = new ReflectionMethod($this->delegate, $methodName);
if (!$this->isHandlerMethod($method)) {
- throw new Exception('No request handling method with name ' . $methodName . ' in class [' . Bee_Utils_Types::getType($this->delegate) . ']');
+ throw new NoHandlerMethodFoundException('No request handling method with name ' . $methodName . ' in class [' . Bee_Utils_Types::getType($this->delegate) . ']');
}
}
return $method->invokeArgs($this->delegate, array($request));
Modified: trunk/framework/Bee/MVC/Controller/Multiaction/AbstractAnnotationBasedResolver.php
===================================================================
--- trunk/framework/Bee/MVC/Controller/Multiaction/AbstractAnnotationBasedResolver.php 2014-07-08 09:52:40 UTC (rev 173)
+++ trunk/framework/Bee/MVC/Controller/Multiaction/AbstractAnnotationBasedResolver.php 2014-07-08 16:41:30 UTC (rev 174)
@@ -37,7 +37,7 @@
const AJAX_TYPE_FALSE_KEY = '_FALSE';
const AJAX_TYPE_ANY_KEY = '_ANY';
- const CACHE_KEY_PREFIX = 'BeeMethodNameResolverAnnotationCache_';
+ const CACHE_KEY_PREFIX = 'BeeMethodResolverAnnotationCache_';
/**
* @var
Modified: trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/AnnotationBasedInvocator.php
===================================================================
--- trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/AnnotationBasedInvocator.php 2014-07-08 09:52:40 UTC (rev 173)
+++ trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/AnnotationBasedInvocator.php 2014-07-08 16:41:30 UTC (rev 174)
@@ -1,5 +1,6 @@
<?php
namespace Bee\MVC\Controller\Multiaction\HandlerMethodInvocator;
+
/*
* Copyright 2008-2014 the original author or authors.
*
@@ -18,9 +19,12 @@
use Bee\Beans\PropertyEditor\PropertyEditorRegistry;
use Bee\MVC\Controller\Multiaction\AbstractAnnotationBasedResolver;
use Bee\MVC\Controller\Multiaction\IHandlerMethodInvocator;
+use Bee_Cache_Manager;
use Bee_Context_Config_IContextAware;
+use Bee_Framework;
use Bee_IContext;
use Bee_MVC_IHttpRequest;
+use Exception;
/**
* Class AnnotationBasedInvocator
@@ -28,35 +32,82 @@
*/
class AnnotationBasedInvocator extends AbstractAnnotationBasedResolver implements IHandlerMethodInvocator, Bee_Context_Config_IContextAware {
+ const DEFAULT_METHOD_CACHE_KEY_PREFIX = 'BeeDefaultHandlerMethodCache_';
+
/**
* @var PropertyEditorRegistry
*/
private $propertyEditorRegistry;
/**
+ * @var MethodInvocation
+ */
+ private $defaultMethodInvocation;
+
+ /**
+ * @return array
+ */
+ protected function getDefaultMethodInvocation() {
+ if (!is_array($this->defaultMethodInvocation)) {
+ // todo: fetch default invocation from cache or rebuild
+
+ $ctrl = $this->getController();
+ $delegateClassName = get_class($ctrl->getDelegate());
+
+ $cacheKey = self::DEFAULT_METHOD_CACHE_KEY_PREFIX . $delegateClassName.'::'.$ctrl->getDefaultMethodName();
+ if (Bee_Framework::getProductionMode()) {
+ try {
+ $this->defaultMethodInvocation = Bee_Cache_Manager::retrieve($cacheKey);
+ } catch (Exception $e) {
+ $this->getLog()->debug('No cached default method invocation for "' . $delegateClassName . '::'. $ctrl->getDefaultMethodName() .'" found, annotation parsing required');
+ }
+ }
+
+ if (!$this->defaultMethodInvocation) {
+ $methodMeta = RegexMappingInvocationResolver::getCachedMethodMetadata(new \ReflectionMethod($delegateClassName, $ctrl->getDefaultMethodName()));
+ $this->defaultMethodInvocation = new MethodInvocation($methodMeta);
+ }
+
+ if (Bee_Framework::getProductionMode()) {
+ Bee_Cache_Manager::store($cacheKey, $this->defaultMethodInvocation);
+ }
+ }
+ return $this->defaultMethodInvocation;
+ }
+
+ /**
* @param Bee_MVC_IHttpRequest $request
* @return \Bee_MVC_ModelAndView
*/
public function invokeHandlerMethod(Bee_MVC_IHttpRequest $request) {
+ /** @var MethodInvocation $resolvedMethod */
$resolvedMethod = $this->resolveMethodForRequest($request);
- /** @var \ReflectionMethod $method */
- $method = $resolvedMethod['method'];
+ if (is_null($resolvedMethod)) {
+ $resolvedMethod = $this->getDefaultMethodInvocation();
+ }
+ $methodMeta = $resolvedMethod->getMethodMeta();
+ $method = $methodMeta->getMethod();
$args = array();
-
- foreach($method->getParameters() as $parameter) {
+ foreach ($method->getParameters() as $parameter) {
$pos = $parameter->getPosition();
- $type = $resolvedMethod['typeMap'][$pos];
- if($type == 'Bee_MVC_IHttpRequest') {
+ $type = $methodMeta->getTypeMapping($pos);
+ if ($type == 'Bee_MVC_IHttpRequest') {
$args[$pos] = $request;
} else {
$propEditor = $this->propertyEditorRegistry->getEditor($type);
- $urlPos = $resolvedMethod['positionMap'][$pos];
- $args[$pos] = $propEditor->fromString($resolvedMethod['paramValues'][$urlPos]);
+ $posMap = $resolvedMethod->getUrlParameterPositions();
+ $value = array_key_exists($pos, $posMap) ? $resolvedMethod->getParamValue($posMap[$pos]) :
+ (array_key_exists($parameter->getName(), $_REQUEST) ? $_REQUEST[$parameter->getName()] : null);
+ if (!is_null($value) || !$parameter->isOptional()) {
+ $args[$pos] = $propEditor->fromString($value);
+// } else {
+// $args[$pos] = null;
+ }
}
}
- $method->invokeArgs($this->getController()->getDelegate(), $args);
+ return $method->invokeArgs($this->getController()->getDelegate(), $args);
}
/**
Added: trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/HandlerMethodMetadata.php
===================================================================
--- trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/HandlerMethodMetadata.php (rev 0)
+++ trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/HandlerMethodMetadata.php 2014-07-08 16:41:30 UTC (rev 174)
@@ -0,0 +1,134 @@
+<?php
+
+namespace Bee\MVC\Controller\Multiaction\HandlerMethodInvocator;
+
+use Bee\Utils\ITypeDefinitions;
+use ReflectionClass;
+use ReflectionMethod;
+
+
+/**
+ * Class HandlerMethodMetadata
+ * @package Bee\MVC\Controller\Multiaction\HandlerMethodInvocator
+ */
+class HandlerMethodMetadata {
+
+ const CLASS_USES_MATCH = '#^\s*use\s+((?:\w+\\\\)*(\w+))(?: as (\w+))?;\s*$#m';
+ const DOCBLOCK_PARAM_TYPE_HINT_MATCH = '#\*\s+@param\s+([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\s\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)#';
+
+ /**
+ * @var array
+ */
+ private static $importMap = array();
+
+ /**
+ * @var ReflectionMethod
+ */
+ private $method;
+
+ /**
+ * @var
+ */
+ private $typeMap;
+
+ /**
+ * @var array
+ */
+ private $requestParamPos;
+
+ /**
+ * @var array
+ */
+ private $parameterPositions;
+
+ function __construct(ReflectionMethod $method) {
+ $this->method = $method;
+
+ $typeNameMap = self::getDocBlockTypeHints($method);
+ $this->typeMap = array();
+ $this->requestParamPos = array();
+ $this->parameterPositions = array();
+
+ foreach ($method->getParameters() as $param) {
+ $typeName = array_key_exists($param->getName(), $typeNameMap) ?
+ $typeNameMap[$param->getName()] :
+ (!is_null($param->getClass()) ? $param->getClass()->getName() : ITypeDefinitions::STRING);
+ if ($typeName == 'Bee_MVC_IHttpRequest') {
+ $this->requestParamPos[$param->getPosition()] = true;
+ }
+ $this->typeMap[$param->getName()] = $typeName;
+ $this->typeMap[$param->getPosition()] = $typeName;
+ $this->parameterPositions[$param->getName()] = $param->getPosition();
+ }
+ }
+
+ /**
+ * @return ReflectionMethod
+ */
+ public function getMethod() {
+ return $this->method;
+ }
+
+ /**
+ * @return array
+ */
+ public function getRequestParamPos() {
+ return $this->requestParamPos;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getTypeMap() {
+ return $this->typeMap;
+ }
+
+ /**
+ * @param $pos
+ * @return mixed
+ */
+ public function getTypeMapping($pos) {
+ return $this->typeMap[$pos];
+ }
+
+ /**
+ * @return array
+ */
+ public function getParameterPositions() {
+ return $this->parameterPositions;
+ }
+
+ /**
+ * @param ReflectionMethod $method
+ * @return array
+ */
+ protected static function getDocBlockTypeHints(ReflectionMethod $method) {
+ $importMap = self::getImportMap($method->getDeclaringClass());
+ $matches = array();
+ preg_match_all(self::DOCBLOCK_PARAM_TYPE_HINT_MATCH, $method->getDocComment(), $matches);
+ $types = $matches[1];
+ array_walk($types, function (&$value) use ($importMap) {
+ if (array_key_exists($value, $importMap)) {
+ $value = $importMap[$value];
+ }
+ });
+ return array_combine($matches[2], $types);
+ }
+
+ /**
+ * @param ReflectionClass $class
+ * @return mixed
+ */
+ protected static function getImportMap(ReflectionClass $class) {
+ $className = $class->getName();
+ if (!array_key_exists($className, self::$importMap)) {
+ $fileContent = file_get_contents($class->getFileName());
+ $matches = array();
+ preg_match_all(self::CLASS_USES_MATCH, $fileContent, $matches, PREG_SET_ORDER);
+ foreach ($matches as $match) {
+ self::$importMap[$className][$match[count($match) - 1]] = $match[1];
+ }
+ }
+ return self::$importMap[$className];
+ }
+}
\ No newline at end of file
Modified: trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/IInvocationResolver.php
===================================================================
--- trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/IInvocationResolver.php 2014-07-08 09:52:40 UTC (rev 173)
+++ trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/IInvocationResolver.php 2014-07-08 16:41:30 UTC (rev 174)
@@ -22,5 +22,9 @@
* @package Bee\MVC\Controller\Multiaction\HandlerMethodInvocator
*/
interface IInvocationResolver {
+ /**
+ * @param Bee_MVC_IHttpRequest $request
+ * @return MethodInvocation
+ */
public function getInvocationDefinition(Bee_MVC_IHttpRequest $request);
}
\ No newline at end of file
Added: trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/MethodInvocation.php
===================================================================
--- trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/MethodInvocation.php (rev 0)
+++ trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/MethodInvocation.php 2014-07-08 16:41:30 UTC (rev 174)
@@ -0,0 +1,80 @@
+<?php
+namespace Bee\MVC\Controller\Multiaction\HandlerMethodInvocator;
+/*
+ * Copyright 2008-2014 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Class MethodInvocation
+ * @package Bee\MVC\Controller\Multiaction\HandlerMethodInvocator
+ */
+class MethodInvocation {
+
+ /**
+ * @var HandlerMethodMetadata
+ */
+ private $methodMeta;
+
+ /**
+ * @var array
+ */
+ private $paramValues;
+
+ /**
+ * @var array
+ */
+ private $urlParameterPositions;
+
+ function __construct(HandlerMethodMetadata $methodMetadata, array $urlParameterPositions = array()) {
+ $this->methodMeta = $methodMetadata;
+ $this->urlParameterPositions = $urlParameterPositions;
+ }
+
+ /**
+ * @return HandlerMethodMetadata
+ */
+ public function getMethodMeta() {
+ return $this->methodMeta;
+ }
+
+ /**
+ * @return array
+ */
+ public function getUrlParameterPositions() {
+ return $this->urlParameterPositions;
+ }
+
+ /**
+ * @return array
+ */
+ public function getParamValues() {
+ return $this->paramValues;
+ }
+
+ /**
+ * @param array $paramValues
+ */
+ public function setParamValues(array $paramValues) {
+ $this->paramValues = $paramValues;
+ }
+
+ /**
+ * @param $pos
+ * @return mixed
+ */
+ public function getParamValue($pos) {
+ return $this->paramValues[$pos];
+ }
+}
\ No newline at end of file
Modified: trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/RegexMappingInvocationResolver.php
===================================================================
--- trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/RegexMappingInvocationResolver.php 2014-07-08 09:52:40 UTC (rev 173)
+++ trunk/framework/Bee/MVC/Controller/Multiaction/HandlerMethodInvocator/RegexMappingInvocationResolver.php 2014-07-08 16:41:30 UTC (rev 174)
@@ -15,10 +15,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+use Addendum\ReflectionAnnotatedMethod;
use Bee\Utils\AntPathToRegexTransformer;
-use Bee\Utils\ITypeDefinitions;
use Bee_MVC_IHttpRequest;
-use ReflectionClass;
use ReflectionMethod;
/**
@@ -28,65 +27,59 @@
class RegexMappingInvocationResolver implements IInvocationResolver {
/**
- * @var array
+ * @var HandlerMethodMetadata[]
*/
+ private static $methodMetadataMap = array();
+
+ /**
+ * @var MethodInvocation[]
+ */
private $mappedMethods = array();
/**
- * @param array|\ReflectionMethod[] $mapping
+ * @param array|ReflectionAnnotatedMethod[] $mapping
*/
public function __construct(array $mapping) {
- foreach($mapping as $antPathPattern => $method) {
- $paramTypes = array();
- $nameToPos = array();
- $fixedParamPos = array();
- foreach($method->getParameters() as $param) {
- $typeName = $param->getClass();
- $typeName = $typeName instanceof ReflectionClass ? $typeName->getName() : null;
- if(!\Bee_Utils_Strings::hasText($typeName)) {
- // todo: derive primitive type names from @var annotations
- $typeName = ITypeDefinitions::STRING;
- } else if($typeName == 'Bee_MVC_IHttpRequest') {
- $fixedParamPos[$param->getPosition()] = true;
- }
- $paramTypes[$param->getName()] = $typeName;
- $paramTypes[$param->getPosition()] = $typeName;
- $nameToPos[$param->getName()] = $param->getPosition();
- }
- $positionMap = array();
- $regex = AntPathToRegexTransformer::getRegexForParametrizedPattern($antPathPattern, $paramTypes, $positionMap);
- $positionMap = array_map(function ($value) use ($nameToPos) {
+ foreach ($mapping as $antPathPattern => $method) {
+ $methodMeta = new HandlerMethodMetadata($method);
+
+ $urlParameterPositions = array();
+ $regex = AntPathToRegexTransformer::getRegexForParametrizedPattern($antPathPattern, $methodMeta->getTypeMap(), $urlParameterPositions);
+ $nameToPos = $methodMeta->getParameterPositions();
+ $urlParameterPositions = array_map(function ($value) use ($nameToPos) {
return array_key_exists($value, $nameToPos) ? $nameToPos[$value] : $value;
- }, $positionMap);
+ }, $urlParameterPositions);
// positionMap should only contain numeric values, mapping from match position to parameter position
- $positionMap = array_flip($positionMap);
+ $urlParameterPositions = array_flip($urlParameterPositions);
// now from parameter pos to match pos
- if(!array_key_exists($regex, $this->mappedMethods)) {
- // todo: object?
- $this->mappedMethods[$regex] = array(
- 'method' => $method,
- 'positionMap' => $positionMap,
- 'requestParamPos' => $fixedParamPos,
- 'typeMap' => $paramTypes
- );
+ if (!array_key_exists($regex, $this->mappedMethods)) {
+ $this->mappedMethods[$regex] = new MethodInvocation($methodMeta, $urlParameterPositions);
}
}
}
/**
* @param Bee_MVC_IHttpRequest $request
- * @return array
+ * @return MethodInvocation
*/
public function getInvocationDefinition(Bee_MVC_IHttpRequest $request) {
$pathInfo = $request->getPathInfo();
- foreach($this->mappedMethods as $regex => $invocInfo) {
+ foreach ($this->mappedMethods as $regex => $invocInfo) {
$matches = array();
- if(preg_match($regex, $pathInfo, $matches) === 1) {
- return array_merge($invocInfo, array('paramValues' => $matches));
+ if (preg_match($regex, $pathInfo, $matches) === 1) {
+ $invocInfo->setParamValues($matches);
+ return $invocInfo;
}
}
- // todo: maybe throw exception? how do we determine if method could not be found?
return null;
}
+
+ public static function getCachedMethodMetadata(ReflectionMethod $method) {
+ $methodFullName = $method->getDeclaringClass()->getName() .'::' . $method->getName();
+ if(!array_key_exists($methodFullName, self::$methodMetadataMap)) {
+ self::$methodMetadataMap[$methodFullName] = new HandlerMethodMetadata($method);
+ }
+ return self::$methodMetadataMap[$methodFullName];
+ }
}
\ No newline at end of file
Added: trunk/framework/Bee/MVC/Controller/Multiaction/NoHandlerMethodFoundException.php
===================================================================
--- trunk/framework/Bee/MVC/Controller/Multiaction/NoHandlerMethodFoundException.php (rev 0)
+++ trunk/framework/Bee/MVC/Controller/Multiaction/NoHandlerMethodFoundException.php 2014-07-08 16:41:30 UTC (rev 174)
@@ -0,0 +1,13 @@
+<?php
+
+namespace Bee\MVC\Controller\Multiaction;
+use Exception;
+
+
+/**
+ * Class NoHandlerMethodFoundException
+ * @package Bee\MVC\Controller\Multiaction
+ */
+class NoHandlerMethodFoundException extends Exception {
+
+}
\ No newline at end of file
Modified: trunk/framework/Bee/MVC/Controller/Multiaction/RequestHandler.php
===================================================================
--- trunk/framework/Bee/MVC/Controller/Multiaction/RequestHandler.php 2014-07-08 09:52:40 UTC (rev 173)
+++ trunk/framework/Bee/MVC/Controller/Multiaction/RequestHandler.php 2014-07-08 16:41:30 UTC (rev 174)
@@ -23,7 +23,8 @@
*
* @author Michael Plomer <mic...@it...>
*
- * @Target("method")
+ * @Annotation
+ * @Target("METHOD")
*/
class Bee_MVC_Controller_Multiaction_RequestHandler extends Annotation {
public $httpMethod;
Added: trunk/framework/Bee/MVC/Controller/Multiaction/RequestHandlerMapping.php
===================================================================
--- trunk/framework/Bee/MVC/Controller/Multiaction/RequestHandlerMapping.php (rev 0)
+++ trunk/framework/Bee/MVC/Controller/Multiaction/RequestHandlerMapping.php 2014-07-08 16:41:30 UTC (rev 174)
@@ -0,0 +1,43 @@
+<?php
+namespace Bee\MVC\Controller\Multiaction;
+/*
+ * Copyright 2008-2014 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Class RequestHandlerMapping
+ * @package Bee\MVC\Controller\Multiaction
+ *
+ * @Annotation
+ * @Target({"METHOD"})
+ */
+class RequestHandlerMapping {
+
+ /**
+ * @var string
+ */
+ public $httpMethod;
+
+ /**
+ * @var string
+ */
+ public $pathPattern;
+
+ /**
+ * @var boolean
+ */
+ public $ajax;
+
+}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|