mirror of
https://github.com/retailcrm/NelmioApiDocBundle.git
synced 2025-02-02 15:51:48 +03:00
commit
22cd63f9bd
@ -78,7 +78,7 @@ class ApiDoc
|
|||||||
/**
|
/**
|
||||||
* @var Boolean
|
* @var Boolean
|
||||||
*/
|
*/
|
||||||
private $isResource = false;
|
private $resource = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var string
|
||||||
@ -132,7 +132,7 @@ class ApiDoc
|
|||||||
|
|
||||||
public function __construct(array $data)
|
public function __construct(array $data)
|
||||||
{
|
{
|
||||||
$this->isResource = isset($data['resource']) && $data['resource'];
|
$this->resource = !empty($data['resource']) ? $data['resource'] : false;
|
||||||
|
|
||||||
if (isset($data['description'])) {
|
if (isset($data['description'])) {
|
||||||
$this->description = $data['description'];
|
$this->description = $data['description'];
|
||||||
@ -292,7 +292,15 @@ class ApiDoc
|
|||||||
*/
|
*/
|
||||||
public function isResource()
|
public function isResource()
|
||||||
{
|
{
|
||||||
return $this->isResource;
|
return (bool) $this->resource;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getResource()
|
||||||
|
{
|
||||||
|
return $this->resource && is_string($this->resource) ? $this->resource : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -108,9 +108,13 @@ class ApiDocExtractor
|
|||||||
if ($method = $this->getReflectionMethod($route->getDefault('_controller'))) {
|
if ($method = $this->getReflectionMethod($route->getDefault('_controller'))) {
|
||||||
if ($annotation = $this->reader->getMethodAnnotation($method, self::ANNOTATION_CLASS)) {
|
if ($annotation = $this->reader->getMethodAnnotation($method, self::ANNOTATION_CLASS)) {
|
||||||
if ($annotation->isResource()) {
|
if ($annotation->isResource()) {
|
||||||
|
if ($resource = $annotation->getResource()) {
|
||||||
|
$resources[] = $resource;
|
||||||
|
} else {
|
||||||
// remove format from routes used for resource grouping
|
// remove format from routes used for resource grouping
|
||||||
$resources[] = str_replace('.{_format}', '', $route->getPattern());
|
$resources[] = str_replace('.{_format}', '', $route->getPattern());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$array[] = array('annotation' => $this->extractData($annotation, $route, $method));
|
$array[] = array('annotation' => $this->extractData($annotation, $route, $method));
|
||||||
}
|
}
|
||||||
@ -123,7 +127,7 @@ class ApiDocExtractor
|
|||||||
$pattern = $element['annotation']->getRoute()->getPattern();
|
$pattern = $element['annotation']->getRoute()->getPattern();
|
||||||
|
|
||||||
foreach ($resources as $resource) {
|
foreach ($resources as $resource) {
|
||||||
if (0 === strpos($pattern, $resource)) {
|
if (0 === strpos($pattern, $resource) || $resource === $element['annotation']->getResource()) {
|
||||||
$array[$index]['resource'] = $resource;
|
$array[$index]['resource'] = $resource;
|
||||||
|
|
||||||
$hasResource = true;
|
$hasResource = true;
|
||||||
|
@ -15,7 +15,7 @@ use Nelmio\ApiDocBundle\Tests\WebTestCase;
|
|||||||
|
|
||||||
class ApiDocExtractorTest extends WebTestCase
|
class ApiDocExtractorTest extends WebTestCase
|
||||||
{
|
{
|
||||||
const ROUTES_QUANTITY = 20;
|
const ROUTES_QUANTITY = 21;
|
||||||
|
|
||||||
public function testAll()
|
public function testAll()
|
||||||
{
|
{
|
||||||
@ -66,8 +66,13 @@ class ApiDocExtractorTest extends WebTestCase
|
|||||||
$this->assertFalse(isset($array2['filters']));
|
$this->assertFalse(isset($array2['filters']));
|
||||||
$this->assertEquals('Nelmio\ApiDocBundle\Tests\Fixtures\Form\TestType', $a2->getInput());
|
$this->assertEquals('Nelmio\ApiDocBundle\Tests\Fixtures\Form\TestType', $a2->getInput());
|
||||||
|
|
||||||
$a3 = $data['13']['annotation'];
|
$a4 = $data[5]['annotation'];
|
||||||
|
$this->assertTrue($a4->isResource());
|
||||||
|
$this->assertEquals('TestResource', $a4->getResource());
|
||||||
|
|
||||||
|
$a3 = $data['14']['annotation'];
|
||||||
$this->assertTrue($a3->getHttps());
|
$this->assertTrue($a3->getHttps());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGet()
|
public function testGet()
|
||||||
|
@ -19,6 +19,15 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
|
|||||||
|
|
||||||
class TestController
|
class TestController
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @ApiDoc(
|
||||||
|
* resource="TestResource"
|
||||||
|
* )
|
||||||
|
*/
|
||||||
|
public function namedResourceAction()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ApiDoc(
|
* @ApiDoc(
|
||||||
* resource=true,
|
* resource=true,
|
||||||
|
@ -121,3 +121,7 @@ test_route_17:
|
|||||||
test_return_nested_output:
|
test_return_nested_output:
|
||||||
pattern: /return-nested-output
|
pattern: /return-nested-output
|
||||||
defaults: { _controller: NelmioApiDocTestBundle:Test:jmsReturnNestedOutput, _format: json }
|
defaults: { _controller: NelmioApiDocTestBundle:Test:jmsReturnNestedOutput, _format: json }
|
||||||
|
|
||||||
|
test_route_named_resource:
|
||||||
|
pattern: /named-resource
|
||||||
|
defaults: { _controller: NelmioApiDocTestBundle:Test:namedResource }
|
||||||
|
@ -138,6 +138,12 @@ _post test 2_
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## TestResource ##
|
||||||
|
|
||||||
|
### `ANY` /named-resource ###
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### `POST` /another-post ###
|
### `POST` /another-post ###
|
||||||
|
|
||||||
_create another test_
|
_create another test_
|
||||||
|
@ -844,6 +844,17 @@ With multiple lines.',
|
|||||||
'deprecated' => false,
|
'deprecated' => false,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
'TestResource' =>
|
||||||
|
array(
|
||||||
|
0 =>
|
||||||
|
array(
|
||||||
|
'method' => 'ANY',
|
||||||
|
'uri' => '/named-resource',
|
||||||
|
'https' => false,
|
||||||
|
'authentication' => false,
|
||||||
|
'deprecated' => false,
|
||||||
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals($expected, $result);
|
$this->assertEquals($expected, $result);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user