[Form] Fixed read_only attribute for expanded fields
This commit is contained in:
parent
0914a38e74
commit
0753cee11a
@ -73,6 +73,7 @@ class FieldType extends AbstractType
|
||||
public function buildView(FormView $view, FormInterface $form)
|
||||
{
|
||||
$name = $form->getName();
|
||||
$readOnly = $form->getAttribute('read_only');
|
||||
|
||||
if ($view->hasParent()) {
|
||||
if ('' === $name) {
|
||||
@ -86,6 +87,9 @@ class FieldType extends AbstractType
|
||||
$id = $name;
|
||||
$fullName = $name;
|
||||
}
|
||||
|
||||
// Complex fields are read-only if themselves or their parent is.
|
||||
$readOnly = $readOnly || $view->getParent()->get('read_only');
|
||||
} else {
|
||||
$id = $name;
|
||||
$fullName = $name;
|
||||
@ -106,9 +110,9 @@ class FieldType extends AbstractType
|
||||
->set('id', $id)
|
||||
->set('name', $name)
|
||||
->set('full_name', $fullName)
|
||||
->set('read_only', $readOnly)
|
||||
->set('errors', $form->getErrors())
|
||||
->set('value', $form->getClientData())
|
||||
->set('read_only', $form->getAttribute('read_only'))
|
||||
->set('disabled', $form->isDisabled())
|
||||
->set('required', $form->isRequired())
|
||||
->set('max_length', $form->getAttribute('max_length'))
|
||||
|
@ -184,7 +184,7 @@ class FormBuilder
|
||||
}
|
||||
|
||||
/**
|
||||
* Set whether the form is disabled
|
||||
* Set whether the form is disabled.
|
||||
*
|
||||
* @param Boolean $disabled Whether the form is disabled
|
||||
*
|
||||
|
@ -150,6 +150,33 @@ class FieldTypeTest extends TypeTestCase
|
||||
$this->assertEquals('parent[child][grand_child]', $view['child']['grand_child']->get('full_name'));
|
||||
}
|
||||
|
||||
public function testNonReadOnlyFieldWithReadOnlyParentBeingReadOnly()
|
||||
{
|
||||
$parent = $this->factory->createNamed('field', 'parent', null, array('read_only' => true));
|
||||
$child = $this->factory->createNamed('field', 'child');
|
||||
$view = $parent->add($child)->createView();
|
||||
|
||||
$this->assertTrue($view['child']->get('read_only'));
|
||||
}
|
||||
|
||||
public function testReadOnlyFieldWithNonReadOnlyParentBeingReadOnly()
|
||||
{
|
||||
$parent = $this->factory->createNamed('field', 'parent');
|
||||
$child = $this->factory->createNamed('field', 'child', null, array('read_only' => true));
|
||||
$view = $parent->add($child)->createView();
|
||||
|
||||
$this->assertTrue($view['child']->get('read_only'));
|
||||
}
|
||||
|
||||
public function testNonReadOnlyFieldWithNonReadOnlyParentBeingNonReadOnly()
|
||||
{
|
||||
$parent = $this->factory->createNamed('field', 'parent');
|
||||
$child = $this->factory->createNamed('field', 'child');
|
||||
$view = $parent->add($child)->createView();
|
||||
|
||||
$this->assertFalse($view['child']->get('read_only'));
|
||||
}
|
||||
|
||||
public function testPassMaxLengthToView()
|
||||
{
|
||||
$form = $this->factory->create('field', null, array('max_length' => 10));
|
||||
|
Reference in New Issue
Block a user