Merge pull request #15 from stof/fix_form_parser

Fix form parser
This commit is contained in:
William Durand 2012-05-22 23:39:06 -07:00
commit 40d3750b20
19 changed files with 118 additions and 94 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
vendor/ vendor/
composer.lock composer.lock
phpunit.xml

View File

@ -40,7 +40,7 @@ class ApiDoc
{ {
if (isset($data['formType'])) { if (isset($data['formType'])) {
$this->formType = $data['formType']; $this->formType = $data['formType'];
} else if (isset($data['filters'])) { } elseif (isset($data['filters'])) {
foreach ($data['filters'] as $filter) { foreach ($data['filters'] as $filter) {
if (!isset($filter['name'])) { if (!isset($filter['name'])) {
throw new \InvalidArgumentException('A "filter" element has to contain a "name" attribute'); throw new \InvalidArgumentException('A "filter" element has to contain a "name" attribute');

View File

@ -11,7 +11,6 @@
namespace Nelmio\ApiDocBundle\DependencyInjection; namespace Nelmio\ApiDocBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\TreeBuilder; use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface; use Symfony\Component\Config\Definition\ConfigurationInterface;

View File

@ -28,7 +28,7 @@ class ApiDocExtractor
private $container; private $container;
/** /**
* @var \ymfony\Component\Routing\RouterInterface * @var \Symfony\Component\Routing\RouterInterface
*/ */
private $router; private $router;
@ -116,7 +116,7 @@ class ApiDocExtractor
* Returns the ReflectionMethod for the given controller string * Returns the ReflectionMethod for the given controller string
* *
* @param string $controller * @param string $controller
* @return ReflectionMethod|null * @return \ReflectionMethod|null
*/ */
public function getReflectionMethod($controller) public function getReflectionMethod($controller)
{ {
@ -150,7 +150,7 @@ class ApiDocExtractor
* - route * - route
* *
* @param string $controller * @param string $controller
* @param Route $route * @param Route $route
* @return array|null * @return array|null
*/ */
public function get($controller, $route) public function get($controller, $route)
@ -172,9 +172,9 @@ class ApiDocExtractor
* - annotation * - annotation
* - route * - route
* *
* @param ApiDoc $annotation * @param ApiDoc $annotation
* @param Route $route * @param Route $route
* @param ReflectionMethod $method * @param \ReflectionMethod $method
* @return array * @return array
*/ */
protected function getData(ApiDoc $annotation, Route $route, \ReflectionMethod $method) protected function getData(ApiDoc $annotation, Route $route, \ReflectionMethod $method)

View File

@ -56,22 +56,22 @@ abstract class AbstractFormatter implements FormatterInterface
/** /**
* Format a single array of data * Format a single array of data
* *
* @param array $data * @param array $data
* @return string|array * @return string|array
*/ */
protected abstract function renderOne(array $data); abstract protected function renderOne(array $data);
/** /**
* Format a set of resource sections. * Format a set of resource sections.
* *
* @param array $collection * @param array $collection
* @return string|array * @return string|array
*/ */
protected abstract function render(array $collection); abstract protected function render(array $collection);
/** /**
* @param ApiDoc $apiDoc * @param ApiDoc $apiDoc
* @param Route $route * @param Route $route
* @return array * @return array
*/ */
protected function getData(ApiDoc $apiDoc, Route $route) protected function getData(ApiDoc $apiDoc, Route $route)

View File

@ -19,17 +19,17 @@ interface FormatterInterface
/** /**
* Format a collection of documentation data. * Format a collection of documentation data.
* *
* @param array $collection * @param array $collection
* @return string|array * @return string|array
*/ */
function format(array $collection); public function format(array $collection);
/** /**
* Format documentation data for one route. * Format documentation data for one route.
* *
* @param ApiDoc $apiDoc * @param ApiDoc $apiDoc
* @param Route $route * @param Route $route
* return string|array * return string|array
*/ */
function formatOne(ApiDoc $apiDoc, Route $route); public function formatOne(ApiDoc $apiDoc, Route $route);
} }

View File

@ -11,8 +11,6 @@
namespace Nelmio\ApiDocBundle\Formatter; namespace Nelmio\ApiDocBundle\Formatter;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use Symfony\Component\Routing\Route;
use Symfony\Component\Templating\EngineInterface; use Symfony\Component\Templating\EngineInterface;
class HtmlFormatter extends AbstractFormatter class HtmlFormatter extends AbstractFormatter

View File

@ -47,7 +47,7 @@ class FormTypeParser
* - required * - required
* - description * - description
* *
* @param AbstractType $type * @param AbstractType $type
* @return array * @return array
*/ */
public function parse(AbstractType $type) public function parse(AbstractType $type)
@ -56,7 +56,11 @@ class FormTypeParser
$parameters = array(); $parameters = array();
foreach ($builder->all() as $name => $child) { foreach ($builder->all() as $name => $child) {
$childBuilder = $builder->create($name, $child['type'] ?: 'text', $child['options']); if ($child instanceof FormBuilder) {
$childBuilder = $child;
} else {
$childBuilder = $builder->create($name, $child['type'] ?: 'text', $child['options']);
}
$bestType = ''; $bestType = '';
foreach ($childBuilder->getTypes() as $type) { foreach ($childBuilder->getTypes() as $type) {

View File

@ -58,7 +58,7 @@ class TestController
* *
* @ApiDoc() * @ApiDoc()
* *
* @param int $id A nice comment * @param int $id A nice comment
* @param int $page * @param int $page
*/ */
public function myCommentedAction() public function myCommentedAction()

View File

@ -11,9 +11,6 @@
namespace Nelmio\ApiDocBundle\Tests\Fixtures\Controller; namespace Nelmio\ApiDocBundle\Tests\Fixtures\Controller;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use Symfony\Component\HttpFoundation\Response;
class TestServiceController extends TestController class TestServiceController extends TestController
{ {
} }

View File

@ -23,6 +23,7 @@ class TestType extends AbstractType
{ {
$builder->add('a', null, array('description' => 'A nice description')); $builder->add('a', null, array('description' => 'A nice description'));
$builder->add('b'); $builder->add('b');
$builder->add($builder->create('c', 'checkbox'));
} }
/** /**

View File

@ -24,4 +24,6 @@ class Test
* @Assert\Type("DateTime"); * @Assert\Type("DateTime");
*/ */
public $b; public $b;
public $c;
} }

View File

@ -31,7 +31,6 @@ while ($dir !== $lastDir) {
} }
use Symfony\Component\Config\Loader\LoaderInterface; use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpKernel\Kernel; use Symfony\Component\HttpKernel\Kernel;
/** /**

View File

@ -75,6 +75,11 @@ b:
* type: string * type: string
* required: true * required: true
c:
* type: boolean
* required: true
### `POST` /tests ### ### `POST` /tests ###
@ -93,6 +98,11 @@ b:
* type: string * type: string
* required: true * required: true
c:
* type: boolean
* required: true
# others # # others #

View File

@ -97,6 +97,12 @@ class SimpleFormatterTest extends WebTestCase
'required' => true, 'required' => true,
'description' => '', 'description' => '',
), ),
'c' =>
array(
'dataType' => 'boolean',
'required' => true,
'description' => '',
),
), ),
'description' => 'create test', 'description' => 'create test',
), ),
@ -121,6 +127,12 @@ class SimpleFormatterTest extends WebTestCase
'required' => true, 'required' => true,
'description' => '', 'description' => '',
), ),
'c' =>
array(
'dataType' => 'boolean',
'required' => true,
'description' => '',
),
), ),
'description' => 'create test', 'description' => 'create test',
), ),

View File

@ -37,14 +37,14 @@ abstract class WebTestCase extends BaseWebTestCase
return static::$kernel->getContainer(); return static::$kernel->getContainer();
} }
static protected function getKernelClass() protected static function getKernelClass()
{ {
require_once __DIR__.'/Fixtures/app/AppKernel.php'; require_once __DIR__.'/Fixtures/app/AppKernel.php';
return 'Nelmio\ApiDocBundle\Tests\Functional\AppKernel'; return 'Nelmio\ApiDocBundle\Tests\Functional\AppKernel';
} }
static protected function createKernel(array $options = array()) protected static function createKernel(array $options = array())
{ {
$class = self::getKernelClass(); $class = self::getKernelClass();

View File

@ -1,6 +1,7 @@
<?php <?php
function includeIfExists($file) { function includeIfExists($file)
{
if (file_exists($file)) { if (file_exists($file)) {
return include $file; return include $file;
} }