[Form] Added the 'range' FormType

This commit is contained in:
Joshua Thijssen 2014-09-27 19:18:59 +02:00 committed by Bernhard Schussek
parent 15ff8652b8
commit b52e1974f7
8 changed files with 104 additions and 0 deletions

View File

@ -176,6 +176,11 @@
{{ block('form_widget_simple') }}
{%- endblock email_widget -%}
{%- block range_widget -%}
{% set type = type|default('range') %}
{{- block('form_widget_simple') -}}
{%- endblock range_widget %}
{%- block button_widget -%}
{%- if label is empty -%}
{%- if label_format is not empty -%}

View File

@ -113,6 +113,9 @@
<service id="form.type.radio" class="Symfony\Component\Form\Extension\Core\Type\RadioType">
<tag name="form.type" alias="radio" />
</service>
<service id="form.type.range" class="Symfony\Component\Form\Extension\Core\Type\RangeType">
<tag name="form.type" alias="range" />
</service>
<service id="form.type.repeated" class="Symfony\Component\Form\Extension\Core\Type\RepeatedType">
<tag name="form.type" alias="repeated" />
</service>

View File

@ -0,0 +1 @@
<?php echo $view['form']->block($form, 'form_widget_simple', array('type' => isset($type) ? $type : 'range'));

View File

@ -5,6 +5,7 @@ CHANGELOG
-----
* deprecated option "read_only" in favor of "attr['readonly']"
* added the html5 "range" FormType
2.7.0
-----

View File

@ -63,6 +63,7 @@ class CoreExtension extends AbstractExtension
new Type\PasswordType(),
new Type\PercentType(),
new Type\RadioType(),
new Type\RangeType(),
new Type\RepeatedType(),
new Type\SearchType(),
new Type\TextareaType(),

View File

@ -0,0 +1,33 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
class RangeType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function getParent()
{
return 'text';
}
/**
* {@inheritdoc}
*/
public function getName()
{
return 'range';
}
}

View File

@ -1597,6 +1597,37 @@ abstract class AbstractBootstrap3LayoutTest extends AbstractLayoutTest
);
}
public function testRange()
{
$form = $this->factory->createNamed('name', 'range', 42, array('attr' => array('min' => 5)));
$this->assertWidgetMatchesXpath($form->createView(), array('attr' => array('class' => 'my&class')),
'/input
[@type="range"]
[@name="name"]
[@value="42"]
[@min="5"]
[@class="my&class form-control"]
'
);
}
public function testRangeWithMinMaxValues()
{
$form = $this->factory->createNamed('name', 'range', 42, array('attr' => array('min' => 5, 'max' => 57)));
$this->assertWidgetMatchesXpath($form->createView(), array('attr' => array('class' => 'my&class')),
'/input
[@type="range"]
[@name="name"]
[@value="42"]
[@min="5"]
[@max="57"]
[@class="my&class form-control"]
'
);
}
public function testTextarea()
{
$form = $this->factory->createNamed('name', 'textarea', 'foo&bar', array(

View File

@ -1712,6 +1712,35 @@ abstract class AbstractLayoutTest extends \Symfony\Component\Form\Test\FormInteg
);
}
public function testRange()
{
$form = $this->factory->createNamed('name', 'range', 42, array('attr' => array('min' => 5)));
$this->assertWidgetMatchesXpath($form->createView(), array(),
'/input
[@type="range"]
[@name="name"]
[@value="42"]
[@min="5"]
'
);
}
public function testRangeWithMinMaxValues()
{
$form = $this->factory->createNamed('name', 'range', 42, array('attr' => array('min' => 5, 'max' => 57)));
$this->assertWidgetMatchesXpath($form->createView(), array(),
'/input
[@type="range"]
[@name="name"]
[@value="42"]
[@min="5"]
[@max="57"]
'
);
}
public function testTextarea()
{
$form = $this->factory->createNamed('name', 'textarea', 'foo&bar', array(