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
|
||||
*/
|
||||
private $isResource = false;
|
||||
private $resource = false;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
@ -132,7 +132,7 @@ class ApiDoc
|
||||
|
||||
public function __construct(array $data)
|
||||
{
|
||||
$this->isResource = isset($data['resource']) && $data['resource'];
|
||||
$this->resource = !empty($data['resource']) ? $data['resource'] : false;
|
||||
|
||||
if (isset($data['description'])) {
|
||||
$this->description = $data['description'];
|
||||
@ -292,7 +292,15 @@ class ApiDoc
|
||||
*/
|
||||
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,8 +108,12 @@ class ApiDocExtractor
|
||||
if ($method = $this->getReflectionMethod($route->getDefault('_controller'))) {
|
||||
if ($annotation = $this->reader->getMethodAnnotation($method, self::ANNOTATION_CLASS)) {
|
||||
if ($annotation->isResource()) {
|
||||
// remove format from routes used for resource grouping
|
||||
$resources[] = str_replace('.{_format}', '', $route->getPattern());
|
||||
if ($resource = $annotation->getResource()) {
|
||||
$resources[] = $resource;
|
||||
} else {
|
||||
// remove format from routes used for resource grouping
|
||||
$resources[] = str_replace('.{_format}', '', $route->getPattern());
|
||||
}
|
||||
}
|
||||
|
||||
$array[] = array('annotation' => $this->extractData($annotation, $route, $method));
|
||||
@ -123,7 +127,7 @@ class ApiDocExtractor
|
||||
$pattern = $element['annotation']->getRoute()->getPattern();
|
||||
|
||||
foreach ($resources as $resource) {
|
||||
if (0 === strpos($pattern, $resource)) {
|
||||
if (0 === strpos($pattern, $resource) || $resource === $element['annotation']->getResource()) {
|
||||
$array[$index]['resource'] = $resource;
|
||||
|
||||
$hasResource = true;
|
||||
|
@ -15,7 +15,7 @@ use Nelmio\ApiDocBundle\Tests\WebTestCase;
|
||||
|
||||
class ApiDocExtractorTest extends WebTestCase
|
||||
{
|
||||
const ROUTES_QUANTITY = 20;
|
||||
const ROUTES_QUANTITY = 21;
|
||||
|
||||
public function testAll()
|
||||
{
|
||||
@ -66,8 +66,13 @@ class ApiDocExtractorTest extends WebTestCase
|
||||
$this->assertFalse(isset($array2['filters']));
|
||||
$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());
|
||||
|
||||
}
|
||||
|
||||
public function testGet()
|
||||
|
@ -19,6 +19,15 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
|
||||
|
||||
class TestController
|
||||
{
|
||||
/**
|
||||
* @ApiDoc(
|
||||
* resource="TestResource"
|
||||
* )
|
||||
*/
|
||||
public function namedResourceAction()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @ApiDoc(
|
||||
* resource=true,
|
||||
|
@ -121,3 +121,7 @@ test_route_17:
|
||||
test_return_nested_output:
|
||||
pattern: /return-nested-output
|
||||
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 ###
|
||||
|
||||
_create another test_
|
||||
|
@ -844,6 +844,17 @@ With multiple lines.',
|
||||
'deprecated' => false,
|
||||
),
|
||||
),
|
||||
'TestResource' =>
|
||||
array(
|
||||
0 =>
|
||||
array(
|
||||
'method' => 'ANY',
|
||||
'uri' => '/named-resource',
|
||||
'https' => false,
|
||||
'authentication' => false,
|
||||
'deprecated' => false,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertEquals($expected, $result);
|
||||
|
Loading…
x
Reference in New Issue
Block a user