diff --git a/DependencyInjection/ExtractorHandlerCompilerPass.php b/DependencyInjection/ExtractorHandlerCompilerPass.php
new file mode 100644
index 0000000..6e7a697
--- /dev/null
+++ b/DependencyInjection/ExtractorHandlerCompilerPass.php
@@ -0,0 +1,37 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Nelmio\ApiDocBundle\DependencyInjection;
+
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
+use Symfony\Component\DependencyInjection\Reference;
+
+
+class ExtractorHandlerCompilerPass implements CompilerPassInterface
+{
+ /**
+ * {@inheritDoc}
+ */
+ public function process(ContainerBuilder $container)
+ {
+ $handlers = array();
+ foreach ($container->findTaggedServiceIds('nelmio_api_doc.extractor.handler') as $id => $attributes) {
+
+ // Adding handlers from tagged services
+ $handlers[] = new Reference($id);
+ }
+ $definition = $container->getDefinition(
+ 'nelmio_api_doc.extractor.api_doc_extractor'
+ );
+ $definition->replaceArgument(4, $handlers);
+ }
+}
diff --git a/DependencyInjection/NelmioApiDocExtension.php b/DependencyInjection/NelmioApiDocExtension.php
index 9c04b28..6298f78 100644
--- a/DependencyInjection/NelmioApiDocExtension.php
+++ b/DependencyInjection/NelmioApiDocExtension.php
@@ -49,18 +49,5 @@ class NelmioApiDocExtension extends Extension
if (isset($config['sandbox']['authentication'])) {
$container->setParameter('nelmio_api_doc.sandbox.authentication', $config['sandbox']['authentication']);
}
-
- // Adding handlers from tagged services
- $definition = $container->getDefinition(
- 'nelmio_api_doc.extractor.api_doc_extractor'
- );
- $taggedServices = $container->findTaggedServiceIds(
- 'nelmio_api_doc.extractor.handler'
- );
- $handlers = array();
- foreach ($taggedServices as $id => $attributes) {
- $handlers[] = new Reference($id);
- }
- $definition->replaceArgument(4, $handlers);
}
}
diff --git a/Extractor/ApiDocExtractor.php b/Extractor/ApiDocExtractor.php
index 6682e39..91c41d8 100644
--- a/Extractor/ApiDocExtractor.php
+++ b/Extractor/ApiDocExtractor.php
@@ -19,7 +19,6 @@ use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;
use Nelmio\ApiDocBundle\Util\DocCommentExtractor;
-use Nelmio\ApiDocBundle\Extractor\Handler\HandlerInterface;
class ApiDocExtractor
{
@@ -55,7 +54,7 @@ class ApiDocExtractor
*/
protected $handlers;
- public function __construct(ContainerInterface $container, RouterInterface $router, Reader $reader, DocCommentExtractor $commentExtractor, $handlers)
+ public function __construct(ContainerInterface $container, RouterInterface $router, Reader $reader, DocCommentExtractor $commentExtractor, array $handlers)
{
$this->container = $container;
$this->router = $router;
@@ -360,7 +359,7 @@ class ApiDocExtractor
{
$annots = $this->reader->getMethodAnnotations($method);
foreach ($this->handlers as $handler) {
- $handler->handle($annotation, $annots);
+ $handler->handle($annotation, $annots, $route, $method);
}
}
}
diff --git a/Extractor/Handler/EmptyHandler.php b/Extractor/Handler/EmptyHandler.php
deleted file mode 100644
index 1b1f958..0000000
--- a/Extractor/Handler/EmptyHandler.php
+++ /dev/null
@@ -1,22 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Nelmio\ApiDocBundle\Extractor\Handler;
-
-use Nelmio\ApiDocBundle\Extractor\HandlerInterface;
-use \Nelmio\ApiDocBundle\Annotation\ApiDoc;
-
-class EmptyHandler implements HandlerInterface
-{
- public function handle(ApiDoc $annotation, $annotations)
- {
- }
-}
diff --git a/Extractor/Handler/FosRestQueryParamHandler.php b/Extractor/Handler/FosRestHandler.php
similarity index 58%
rename from Extractor/Handler/FosRestQueryParamHandler.php
rename to Extractor/Handler/FosRestHandler.php
index bcbf9db..8ad2602 100644
--- a/Extractor/Handler/FosRestQueryParamHandler.php
+++ b/Extractor/Handler/FosRestHandler.php
@@ -12,16 +12,25 @@
namespace Nelmio\ApiDocBundle\Extractor\Handler;
use Nelmio\ApiDocBundle\Extractor\HandlerInterface;
-use \Nelmio\ApiDocBundle\Annotation\ApiDoc;
+use Nelmio\ApiDocBundle\Annotation\ApiDoc;
+use Symfony\Component\Routing\Route;
-class FosRestQueryParamHandler implements HandlerInterface
+class FosRestHandler implements HandlerInterface
{
+ const FOS_REST_REQUEST_PARAM_CLASS = 'FOS\\RestBundle\\Controller\\Annotations\\RequestParam';
const FOS_REST_QUERY_PARAM_CLASS = 'FOS\\RestBundle\\Controller\\Annotations\\QueryParam';
- public function handle(ApiDoc $annotation, $annotations)
+ public function handle(ApiDoc $annotation, $annotations, Route $route, \ReflectionMethod $method)
{
foreach ($annotations as $annot) {
- if (is_a($annot, self::FOS_REST_QUERY_PARAM_CLASS)) {
+ if (is_a($annot, self::FOS_REST_REQUEST_PARAM_CLASS)) {
+ $annotation->addParameter($annot->name, array(
+ 'required' => $annot->strict && $annot->default === null,
+ 'dataType' => $annot->requirements,
+ 'description' => $annot->description,
+ 'readonly' => false
+ ));
+ } elseif (is_a($annot, self::FOS_REST_QUERY_PARAM_CLASS)) {
if ($annot->strict && $annot->default === null) {
$annotation->addRequirement($annot->name, array(
'requirement' => $annot->requirements,
diff --git a/Extractor/Handler/FosRestRequestParamHandler.php b/Extractor/Handler/FosRestRequestParamHandler.php
deleted file mode 100644
index 1260bd4..0000000
--- a/Extractor/Handler/FosRestRequestParamHandler.php
+++ /dev/null
@@ -1,34 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Nelmio\ApiDocBundle\Extractor\Handler;
-
-use Nelmio\ApiDocBundle\Extractor\HandlerInterface;
-use \Nelmio\ApiDocBundle\Annotation\ApiDoc;
-
-class FosRestRequestParamHandler implements HandlerInterface
-{
- const FOS_REST_REQUEST_PARAM_CLASS = 'FOS\\RestBundle\\Controller\\Annotations\\RequestParam';
-
- public function handle(ApiDoc $annotation, $annotations)
- {
- foreach ($annotations as $annot) {
- if (is_a($annot, self::FOS_REST_REQUEST_PARAM_CLASS)) {
- $annotation->addParameter($annot->name, array(
- 'required' => $annot->strict && $annot->default === null,
- 'dataType' => $annot->requirements,
- 'description' => $annot->description,
- 'readonly' => false
- ));
- }
- }
- }
-}
diff --git a/Extractor/Handler/JmsSecurityExtraSecureHandler.php b/Extractor/Handler/JmsSecurityExtraHandler.php
similarity index 72%
rename from Extractor/Handler/JmsSecurityExtraSecureHandler.php
rename to Extractor/Handler/JmsSecurityExtraHandler.php
index 1110ee1..6dfca7a 100644
--- a/Extractor/Handler/JmsSecurityExtraSecureHandler.php
+++ b/Extractor/Handler/JmsSecurityExtraHandler.php
@@ -12,13 +12,14 @@
namespace Nelmio\ApiDocBundle\Extractor\Handler;
use Nelmio\ApiDocBundle\Extractor\HandlerInterface;
-use \Nelmio\ApiDocBundle\Annotation\ApiDoc;
+use Nelmio\ApiDocBundle\Annotation\ApiDoc;
+use Symfony\Component\Routing\Route;
-class JmsSecurityExtraSecureHandler implements HandlerInterface
+class JmsSecurityExtraHandler implements HandlerInterface
{
const JMS_SECURITY_EXTRA_SECURE_CLASS = 'JMS\\SecurityExtraBundle\\Annotation\\Secure';
- public function handle(ApiDoc $annotation, $annotations)
+ public function handle(ApiDoc $annotation, $annotations, Route $route, \ReflectionMethod $method)
{
foreach ($annotations as $annot) {
if (is_a($annot, self::JMS_SECURITY_EXTRA_SECURE_CLASS)) {
diff --git a/Extractor/Handler/SensioFrameworkExtraCacheHandler.php b/Extractor/Handler/SensioFrameworkExtraHandler.php
similarity index 72%
rename from Extractor/Handler/SensioFrameworkExtraCacheHandler.php
rename to Extractor/Handler/SensioFrameworkExtraHandler.php
index 1b22d86..e92f143 100644
--- a/Extractor/Handler/SensioFrameworkExtraCacheHandler.php
+++ b/Extractor/Handler/SensioFrameworkExtraHandler.php
@@ -12,13 +12,14 @@
namespace Nelmio\ApiDocBundle\Extractor\Handler;
use Nelmio\ApiDocBundle\Extractor\HandlerInterface;
-use \Nelmio\ApiDocBundle\Annotation\ApiDoc;
+use Nelmio\ApiDocBundle\Annotation\ApiDoc;
+use Symfony\Component\Routing\Route;
-class SensioFrameworkExtraCacheHandler implements HandlerInterface
+class SensioFrameworkExtraHandler implements HandlerInterface
{
const CACHE_ANNOTATION_CLASS = 'Sensio\\Bundle\\FrameworkExtraBundle\\Configuration\\Cache';
- public function handle(ApiDoc $annotation, $annotations)
+ public function handle(ApiDoc $annotation, $annotations, Route $route, \ReflectionMethod $method)
{
foreach ($annotations as $annot) {
if (is_a($annot, self::CACHE_ANNOTATION_CLASS)) {
diff --git a/Extractor/HandlerInterface.php b/Extractor/HandlerInterface.php
index bedf2ff..00557e1 100644
--- a/Extractor/HandlerInterface.php
+++ b/Extractor/HandlerInterface.php
@@ -13,7 +13,9 @@ namespace Nelmio\ApiDocBundle\Extractor;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
+use Symfony\Component\Routing\Route;
+
interface HandlerInterface
{
- public function handle(ApiDoc $annotation, $annotations);
+ public function handle(ApiDoc $annotation, $annotations, Route $route, \ReflectionMethod $method);
}
diff --git a/NelmioApiDocBundle.php b/NelmioApiDocBundle.php
index ad9a5ce..c165888 100644
--- a/NelmioApiDocBundle.php
+++ b/NelmioApiDocBundle.php
@@ -6,6 +6,7 @@ use Symfony\Component\HttpKernel\Bundle\Bundle;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Nelmio\ApiDocBundle\DependencyInjection\RegisterJmsParserPass;
use Nelmio\ApiDocBundle\DependencyInjection\RegisterExtractorParsersPass;
+use Nelmio\ApiDocBundle\DependencyInjection\ExtractorHandlerCompilerPass;
class NelmioApiDocBundle extends Bundle
{
@@ -15,5 +16,6 @@ class NelmioApiDocBundle extends Bundle
$container->addCompilerPass(new RegisterJmsParserPass());
$container->addCompilerPass(new RegisterExtractorParsersPass());
+ $container->addCompilerPass(new ExtractorHandlerCompilerPass());
}
}
diff --git a/Resources/config/services.xml b/Resources/config/services.xml
index c53998c..2c15d31 100644
--- a/Resources/config/services.xml
+++ b/Resources/config/services.xml
@@ -9,10 +9,9 @@
Nelmio\ApiDocBundle\Twig\Extension\MarkdownExtension
Nelmio\ApiDocBundle\Util\DocCommentExtractor
- Nelmio\ApiDocBundle\Extractor\Handler\FosRestQueryParamHandler
- Nelmio\ApiDocBundle\Extractor\Handler\FosRestRequestParamHandler
- Nelmio\ApiDocBundle\Extractor\Handler\JmsSecurityExtraSecureHandler
- Nelmio\ApiDocBundle\Extractor\Handler\SensioFrameworkExtraCacheHandler
+ Nelmio\ApiDocBundle\Extractor\Handler\FosRestHandler
+ Nelmio\ApiDocBundle\Extractor\Handler\JmsSecurityExtraHandler
+ Nelmio\ApiDocBundle\Extractor\Handler\SensioFrameworkExtraHandler
@@ -36,19 +35,15 @@
-
+
-
+
-
-
-
-
-
+