[Form] Removed dependency from renderer plugins on fields. The field instance is now passed to setUp() instead.
This commit is contained in:
parent
cb283d3783
commit
eba602ed1b
@ -20,7 +20,7 @@ class CheckboxFieldConfig extends AbstractFieldConfig
|
||||
public function configure(FieldInterface $field, array $options)
|
||||
{
|
||||
$field->setValueTransformer(new BooleanToStringTransformer())
|
||||
->addRendererPlugin(new CheckedPlugin($field))
|
||||
->addRendererPlugin(new CheckedPlugin())
|
||||
->setRendererVar('value', $options['value']);
|
||||
}
|
||||
|
||||
|
@ -56,7 +56,7 @@ class ChoiceFieldConfig extends AbstractFieldConfig
|
||||
}
|
||||
|
||||
if ($options['multiple'] && !$options['expanded']) {
|
||||
$field->addRendererPlugin(new SelectMultipleNamePlugin($field));
|
||||
$field->addRendererPlugin(new SelectMultipleNamePlugin());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -41,8 +41,8 @@ class FieldConfig extends AbstractFieldConfig
|
||||
->setValueTransformer($options['value_transformer'])
|
||||
->setNormalizationTransformer($options['normalization_transformer'])
|
||||
->setData($options['data'])
|
||||
->setRenderer(new DefaultRenderer($this->theme, $options['template']))
|
||||
->addRendererPlugin(new FieldPlugin($field))
|
||||
->setRenderer(new DefaultRenderer($field, $this->theme, $options['template']))
|
||||
->addRendererPlugin(new FieldPlugin())
|
||||
->setRendererVar('class', null)
|
||||
->setRendererVar('max_length', null)
|
||||
->setRendererVar('size', null)
|
||||
|
@ -42,7 +42,7 @@ class FormConfig extends AbstractFieldConfig
|
||||
->setValidationGroups($options['validation_groups'])
|
||||
->setVirtual($options['virtual'])
|
||||
->setValidator($options['validator'])
|
||||
->addRendererPlugin(new FormPlugin($field ));
|
||||
->addRendererPlugin(new FormPlugin());
|
||||
|
||||
if ($options['csrf_protection']) {
|
||||
$field->enableCsrfProtection($options['csrf_provider'], $options['csrf_field_name']);
|
||||
|
@ -18,7 +18,7 @@ class PasswordFieldConfig extends AbstractFieldConfig
|
||||
{
|
||||
public function configure(FieldInterface $field, array $options)
|
||||
{
|
||||
$field->addRendererPlugin(new PasswordValuePlugin($field, $options['always_empty']));
|
||||
$field->addRendererPlugin(new PasswordValuePlugin($options['always_empty']));
|
||||
}
|
||||
|
||||
public function getDefaultOptions(array $options)
|
||||
|
@ -21,8 +21,8 @@ class RadioFieldConfig extends AbstractFieldConfig
|
||||
public function configure(FieldInterface $field, array $options)
|
||||
{
|
||||
$field->setValueTransformer(new BooleanToStringTransformer())
|
||||
->addRendererPlugin(new CheckedPlugin($field))
|
||||
->addRendererPlugin(new ParentNamePlugin($field))
|
||||
->addRendererPlugin(new CheckedPlugin())
|
||||
->addRendererPlugin(new ParentNamePlugin())
|
||||
->setRendererVar('value', $options['value']);
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,7 @@ namespace Symfony\Component\Form;
|
||||
use Symfony\Component\Form\ValueTransformer\ValueTransformerInterface;
|
||||
use Symfony\Component\Form\ValueTransformer\TransformationFailedException;
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
use Symfony\Component\Form\Renderer\Plugin\PluginInterface;
|
||||
use Symfony\Component\Form\Renderer\Plugin\RendererPluginInterface;
|
||||
use Symfony\Component\Form\Event\DataEvent;
|
||||
use Symfony\Component\Form\Event\FilterDataEvent;
|
||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||
@ -495,7 +495,7 @@ class Field implements FieldInterface
|
||||
return $this->renderer;
|
||||
}
|
||||
|
||||
public function addRendererPlugin(PluginInterface $plugin)
|
||||
public function addRendererPlugin(RendererPluginInterface $plugin)
|
||||
{
|
||||
$this->renderer->addPlugin($plugin);
|
||||
|
||||
|
@ -13,7 +13,7 @@ namespace Symfony\Component\Form\Renderer;
|
||||
|
||||
use Symfony\Component\Form\FieldInterface;
|
||||
use Symfony\Component\Form\Renderer\Theme\ThemeInterface;
|
||||
use Symfony\Component\Form\Renderer\Plugin\PluginInterface;
|
||||
use Symfony\Component\Form\Renderer\Plugin\RendererPluginInterface;
|
||||
|
||||
class DefaultRenderer implements RendererInterface, \ArrayAccess
|
||||
{
|
||||
@ -33,8 +33,9 @@ class DefaultRenderer implements RendererInterface, \ArrayAccess
|
||||
|
||||
private $children = array();
|
||||
|
||||
public function __construct(ThemeInterface $theme, $template)
|
||||
public function __construct(FieldInterface $field, ThemeInterface $theme, $template)
|
||||
{
|
||||
$this->field = $field;
|
||||
$this->theme = $theme;
|
||||
$this->template = $template;
|
||||
}
|
||||
@ -56,8 +57,8 @@ class DefaultRenderer implements RendererInterface, \ArrayAccess
|
||||
// Make sure that plugins and set variables are applied in the
|
||||
// order they were added
|
||||
foreach ($this->changes as $key => $value) {
|
||||
if ($value instanceof PluginInterface) {
|
||||
$value->setUp($this);
|
||||
if ($value instanceof RendererPluginInterface) {
|
||||
$value->setUp($this->field, $this);
|
||||
} else {
|
||||
$this->vars[$key] = $value;
|
||||
}
|
||||
@ -82,7 +83,7 @@ class DefaultRenderer implements RendererInterface, \ArrayAccess
|
||||
return $this->theme;
|
||||
}
|
||||
|
||||
public function addPlugin(PluginInterface $plugin)
|
||||
public function addPlugin(RendererPluginInterface $plugin)
|
||||
{
|
||||
$this->initialized = false;
|
||||
$this->changes[] = $plugin;
|
||||
|
@ -14,17 +14,10 @@ namespace Symfony\Component\Form\Renderer\Plugin;
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
use Symfony\Component\Form\FieldInterface;
|
||||
|
||||
class CheckedPlugin implements PluginInterface
|
||||
class CheckedPlugin implements RendererPluginInterface
|
||||
{
|
||||
private $field;
|
||||
|
||||
public function __construct(FieldInterface $field)
|
||||
public function setUp(FieldInterface $field, RendererInterface $renderer)
|
||||
{
|
||||
$this->field = $field;
|
||||
}
|
||||
|
||||
public function setUp(RendererInterface $renderer)
|
||||
{
|
||||
$renderer->setVar('checked', (bool)$this->field->getData());
|
||||
$renderer->setVar('checked', (bool)$field->getData());
|
||||
}
|
||||
}
|
@ -11,10 +11,11 @@
|
||||
|
||||
namespace Symfony\Component\Form\Renderer\Plugin;
|
||||
|
||||
use Symfony\Component\Form\FieldInterface;
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
use Symfony\Component\Form\ChoiceList\ChoiceListInterface;
|
||||
|
||||
class ChoicePlugin implements PluginInterface
|
||||
class ChoicePlugin implements RendererPluginInterface
|
||||
{
|
||||
private $choiceList;
|
||||
|
||||
@ -23,7 +24,7 @@ class ChoicePlugin implements PluginInterface
|
||||
$this->choiceList = $choiceList;
|
||||
}
|
||||
|
||||
public function setUp(RendererInterface $renderer)
|
||||
public function setUp(FieldInterface $field, RendererInterface $renderer)
|
||||
{
|
||||
$choiceList = $this->choiceList;
|
||||
|
||||
|
@ -11,9 +11,10 @@
|
||||
|
||||
namespace Symfony\Component\Form\Renderer\Plugin;
|
||||
|
||||
use Symfony\Component\Form\FieldInterface;
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
|
||||
class DatePatternPlugin implements PluginInterface
|
||||
class DatePatternPlugin implements RendererPluginInterface
|
||||
{
|
||||
private $formatter;
|
||||
|
||||
@ -22,7 +23,7 @@ class DatePatternPlugin implements PluginInterface
|
||||
$this->formatter = $formatter;
|
||||
}
|
||||
|
||||
public function setUp(RendererInterface $renderer)
|
||||
public function setUp(FieldInterface $field, RendererInterface $renderer)
|
||||
{
|
||||
$renderer->setVar('date_pattern', $this->getPattern());
|
||||
}
|
||||
|
@ -11,29 +11,13 @@
|
||||
|
||||
namespace Symfony\Component\Form\Renderer\Plugin;
|
||||
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
use Symfony\Component\Form\FieldInterface;
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
|
||||
class EnctypePlugin implements PluginInterface
|
||||
class EnctypePlugin implements RendererPluginInterface
|
||||
{
|
||||
private $field;
|
||||
|
||||
public function __construct(FieldInterface $field)
|
||||
public function setUp(FieldInterface $field, RendererInterface $renderer)
|
||||
{
|
||||
$this->field = $field;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the HTML enctype in the field tag, if necessary
|
||||
*
|
||||
* Example usage in Twig templates:
|
||||
*
|
||||
* <field action="..." method="post" {{ field.render.enctype }}>
|
||||
*
|
||||
* @param Form $field The field for which to render the encoding type
|
||||
*/
|
||||
public function setUp(RendererInterface $renderer)
|
||||
{
|
||||
$renderer->setVar('enctype', $this->field->isMultipart() ? 'enctype="multipart/form-data"' : '');
|
||||
$renderer->setVar('enctype', $field->isMultipart() ? 'enctype="multipart/form-data"' : '');
|
||||
}
|
||||
}
|
@ -14,15 +14,8 @@ namespace Symfony\Component\Form\Renderer\Plugin;
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
use Symfony\Component\Form\FieldInterface;
|
||||
|
||||
class FieldPlugin implements PluginInterface
|
||||
class FieldPlugin implements RendererPluginInterface
|
||||
{
|
||||
private $field;
|
||||
|
||||
public function __construct(FieldInterface $field)
|
||||
{
|
||||
$this->field = $field;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the HTML enctype in the field tag, if necessary
|
||||
*
|
||||
@ -32,12 +25,12 @@ class FieldPlugin implements PluginInterface
|
||||
*
|
||||
* @param Form $field The field for which to render the encoding type
|
||||
*/
|
||||
public function setUp(RendererInterface $renderer)
|
||||
public function setUp(FieldInterface $field, RendererInterface $renderer)
|
||||
{
|
||||
$fieldKey = $this->field->getName();
|
||||
$fieldKey = $field->getName();
|
||||
|
||||
if ($this->field->hasParent()) {
|
||||
$parentRenderer = $this->field->getParent()->getRenderer();
|
||||
if ($field->hasParent()) {
|
||||
$parentRenderer = $field->getParent()->getRenderer();
|
||||
$parentId = $parentRenderer->getVar('id');
|
||||
$parentName = $parentRenderer->getVar('name');
|
||||
$id = sprintf('%s_%s', $parentId, $fieldKey);
|
||||
@ -50,13 +43,13 @@ class FieldPlugin implements PluginInterface
|
||||
$renderer->setVar('this', $renderer);
|
||||
$renderer->setVar('id', $id);
|
||||
$renderer->setVar('name', $name);
|
||||
$renderer->setVar('errors', $this->field->getErrors());
|
||||
$renderer->setVar('value', $this->field->getDisplayedData());
|
||||
$renderer->setVar('disabled', $this->field->isDisabled());
|
||||
$renderer->setVar('required', $this->field->isRequired());
|
||||
$renderer->setVar('errors', $field->getErrors());
|
||||
$renderer->setVar('value', $field->getDisplayedData());
|
||||
$renderer->setVar('disabled', $field->isDisabled());
|
||||
$renderer->setVar('required', $field->isRequired());
|
||||
$renderer->setVar('class', null);
|
||||
$renderer->setVar('max_length', null);
|
||||
$renderer->setVar('size', null);
|
||||
$renderer->setVar('label', ucfirst(strtolower(str_replace('_', ' ', $this->field->getName()))));
|
||||
$renderer->setVar('label', ucfirst(strtolower(str_replace('_', ' ', $field->getName()))));
|
||||
}
|
||||
}
|
@ -11,20 +11,19 @@
|
||||
|
||||
namespace Symfony\Component\Form\Renderer\Plugin;
|
||||
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
use Symfony\Component\Form\FieldInterface;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
use Symfony\Component\Form\Exception\UnexpectedTypeException;
|
||||
|
||||
class FormPlugin implements PluginInterface
|
||||
class FormPlugin implements RendererPluginInterface
|
||||
{
|
||||
private $form;
|
||||
|
||||
public function __construct(FormInterface $form)
|
||||
public function setUp(FieldInterface $form, RendererInterface $renderer)
|
||||
{
|
||||
$this->form = $form;
|
||||
if (!$form instanceof FormInterface) {
|
||||
throw new UnexpectedTypeException($form, 'Symfony\Component\Form\FormInterface');
|
||||
}
|
||||
|
||||
public function setUp(RendererInterface $renderer)
|
||||
{
|
||||
$fields = array();
|
||||
|
||||
foreach ($this->form as $name => $field) {
|
||||
|
@ -11,10 +11,10 @@
|
||||
|
||||
namespace Symfony\Component\Form\Renderer\Plugin;
|
||||
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
use Symfony\Component\Form\FieldInterface;
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
|
||||
class MaxLengthPlugin implements PluginInterface
|
||||
class MaxLengthPlugin implements RendererPluginInterface
|
||||
{
|
||||
private $maxLength;
|
||||
|
||||
@ -23,16 +23,7 @@ class MaxLengthPlugin implements PluginInterface
|
||||
$this->maxLength = $maxLength;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the HTML enctype in the field tag, if necessary
|
||||
*
|
||||
* Example usage in Twig templates:
|
||||
*
|
||||
* <field action="..." method="post" {{ field.render.enctype }}>
|
||||
*
|
||||
* @param Form $field The field for which to render the encoding type
|
||||
*/
|
||||
public function setUp(RendererInterface $renderer)
|
||||
public function setUp(FieldInterface $field, RendererInterface $renderer)
|
||||
{
|
||||
$renderer->setVar('max_length', $this->maxLength);
|
||||
}
|
||||
|
@ -11,9 +11,10 @@
|
||||
|
||||
namespace Symfony\Component\Form\Renderer\Plugin;
|
||||
|
||||
use Symfony\Component\Form\FieldInterface;
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
|
||||
class MoneyPatternPlugin implements PluginInterface
|
||||
class MoneyPatternPlugin implements RendererPluginInterface
|
||||
{
|
||||
private static $patterns = array();
|
||||
|
||||
@ -24,7 +25,7 @@ class MoneyPatternPlugin implements PluginInterface
|
||||
$this->currency = $currency;
|
||||
}
|
||||
|
||||
public function setUp(RendererInterface $renderer)
|
||||
public function setUp(FieldInterface $field, RendererInterface $renderer)
|
||||
{
|
||||
$renderer->setVar('money_pattern', self::getPattern($this->currency));
|
||||
}
|
||||
|
@ -11,31 +11,15 @@
|
||||
|
||||
namespace Symfony\Component\Form\Renderer\Plugin;
|
||||
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
use Symfony\Component\Form\FieldInterface;
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
|
||||
class ParentNamePlugin implements PluginInterface
|
||||
class ParentNamePlugin implements RendererPluginInterface
|
||||
{
|
||||
private $field;
|
||||
|
||||
public function __construct(FieldInterface $field)
|
||||
public function setUp(FieldInterface $field, RendererInterface $renderer)
|
||||
{
|
||||
$this->field = $field;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the HTML enctype in the field tag, if necessary
|
||||
*
|
||||
* Example usage in Twig templates:
|
||||
*
|
||||
* <field action="..." method="post" {{ field.render.enctype }}>
|
||||
*
|
||||
* @param Form $field The field for which to render the encoding type
|
||||
*/
|
||||
public function setUp(RendererInterface $renderer)
|
||||
{
|
||||
if ($this->field->hasParent()) {
|
||||
$parentRenderer = $this->field->getParent()->getRenderer();
|
||||
if ($field->hasParent()) {
|
||||
$parentRenderer = $field->getParent()->getRenderer();
|
||||
$renderer->setVar('name', $parentRenderer->getVar('name'));
|
||||
}
|
||||
}
|
||||
|
@ -11,35 +11,23 @@
|
||||
|
||||
namespace Symfony\Component\Form\Renderer\Plugin;
|
||||
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
use Symfony\Component\Form\FieldInterface;
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
|
||||
class PasswordValuePlugin implements PluginInterface
|
||||
class PasswordValuePlugin implements RendererPluginInterface
|
||||
{
|
||||
private $field;
|
||||
|
||||
private $alwaysEmpty;
|
||||
|
||||
public function __construct(FieldInterface $field, $alwaysEmpty = true)
|
||||
public function __construct($alwaysEmpty = true)
|
||||
{
|
||||
$this->field = $field;
|
||||
$this->alwaysEmpty = $alwaysEmpty;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the HTML enctype in the field tag, if necessary
|
||||
*
|
||||
* Example usage in Twig templates:
|
||||
*
|
||||
* <field action="..." method="post" {{ field.render.enctype }}>
|
||||
*
|
||||
* @param Form $field The field for which to render the encoding type
|
||||
*/
|
||||
public function setUp(RendererInterface $renderer)
|
||||
public function setUp(FieldInterface $field, RendererInterface $renderer)
|
||||
{
|
||||
$value = $this->alwaysEmpty || !$this->field->isSubmitted()
|
||||
$value = $this->alwaysEmpty || !$field->isSubmitted()
|
||||
? ''
|
||||
: $this->field->getDisplayedData();
|
||||
: $field->getDisplayedData();
|
||||
|
||||
$renderer->setVar('value', $value);
|
||||
}
|
||||
|
@ -11,9 +11,10 @@
|
||||
|
||||
namespace Symfony\Component\Form\Renderer\Plugin;
|
||||
|
||||
use Symfony\Component\Form\FieldInterface;
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
|
||||
interface PluginInterface
|
||||
interface RendererPluginInterface
|
||||
{
|
||||
function setUp(RendererInterface $renderer);
|
||||
function setUp(FieldInterface $field, RendererInterface $renderer);
|
||||
}
|
@ -11,11 +11,12 @@
|
||||
|
||||
namespace Symfony\Component\Form\Renderer\Plugin;
|
||||
|
||||
use Symfony\Component\Form\FieldInterface;
|
||||
use Symfony\Component\Form\Renderer\RendererInterface;
|
||||
|
||||
class SelectMultipleNamePlugin implements PluginInterface
|
||||
class SelectMultipleNamePlugin implements RendererPluginInterface
|
||||
{
|
||||
public function setUp(RendererInterface $renderer)
|
||||
public function setUp(FieldInterface $field, RendererInterface $renderer)
|
||||
{
|
||||
// Add "[]" to the name in case a select tag with multiple options is
|
||||
// displayed. Otherwise only one of the selected options is sent in the
|
||||
|
Reference in New Issue
Block a user