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/
composer.lock
phpunit.xml

View File

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

View File

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

View File

@ -28,7 +28,7 @@ class ApiDocExtractor
private $container;
/**
* @var \ymfony\Component\Routing\RouterInterface
* @var \Symfony\Component\Routing\RouterInterface
*/
private $router;
@ -116,7 +116,7 @@ class ApiDocExtractor
* Returns the ReflectionMethod for the given controller string
*
* @param string $controller
* @return ReflectionMethod|null
* @return \ReflectionMethod|null
*/
public function getReflectionMethod($controller)
{
@ -150,7 +150,7 @@ class ApiDocExtractor
* - route
*
* @param string $controller
* @param Route $route
* @param Route $route
* @return array|null
*/
public function get($controller, $route)
@ -172,9 +172,9 @@ class ApiDocExtractor
* - annotation
* - route
*
* @param ApiDoc $annotation
* @param Route $route
* @param ReflectionMethod $method
* @param ApiDoc $annotation
* @param Route $route
* @param \ReflectionMethod $method
* @return array
*/
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
*
* @param array $data
* @param array $data
* @return string|array
*/
protected abstract function renderOne(array $data);
abstract protected function renderOne(array $data);
/**
* Format a set of resource sections.
*
* @param array $collection
* @param array $collection
* @return string|array
*/
protected abstract function render(array $collection);
abstract protected function render(array $collection);
/**
* @param ApiDoc $apiDoc
* @param Route $route
* @param ApiDoc $apiDoc
* @param Route $route
* @return array
*/
protected function getData(ApiDoc $apiDoc, Route $route)

View File

@ -19,17 +19,17 @@ interface FormatterInterface
/**
* Format a collection of documentation data.
*
* @param array $collection
* @param array $collection
* @return string|array
*/
function format(array $collection);
public function format(array $collection);
/**
* Format documentation data for one route.
*
* @param ApiDoc $apiDoc
* @param Route $route
* @param Route $route
* 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;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use Symfony\Component\Routing\Route;
use Symfony\Component\Templating\EngineInterface;
class HtmlFormatter extends AbstractFormatter

View File

@ -47,7 +47,7 @@ class FormTypeParser
* - required
* - description
*
* @param AbstractType $type
* @param AbstractType $type
* @return array
*/
public function parse(AbstractType $type)
@ -56,7 +56,11 @@ class FormTypeParser
$parameters = array();
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 = '';
foreach ($childBuilder->getTypes() as $type) {

View File

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

View File

@ -11,9 +11,6 @@
namespace Nelmio\ApiDocBundle\Tests\Fixtures\Controller;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use Symfony\Component\HttpFoundation\Response;
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('b');
$builder->add($builder->create('c', 'checkbox'));
}
/**

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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