Kaynağa Gözat

Add help option named sonata_admin_help to sub-fields that are non admin fields. Example given with sonata_type_immutable_array.

Philippe de Araujo 10 yıl önce
ebeveyn
işleme
e185f9aec7

+ 6 - 2
Form/Extension/Field/Type/FormTypeFieldExtension.php

@@ -50,6 +50,7 @@ class FormTypeFieldExtension extends AbstractTypeExtension
         );
 
         $builder->setAttribute('sonata_admin_enabled', false);
+        $builder->setAttribute('sonata_admin_help', false);
 
         if ($options['sonata_field_description'] instanceof FieldDescriptionInterface) {
             $fieldDescription = $options['sonata_field_description'];
@@ -107,7 +108,8 @@ class FormTypeFieldExtension extends AbstractTypeExtension
      */
     public function buildView(FormView $view, FormInterface $form, array $options)
     {
-        $sonataAdmin = $form->getConfig()->getAttribute('sonata_admin');
+        $sonataAdmin     = $form->getConfig()->getAttribute('sonata_admin');
+        $sonataAdminHelp = isset($options['sonata_admin_help']) ? $options['sonata_admin_help'] : null;
 
         // avoid to add extra information not required by non admin field
         if ($sonataAdmin && $form->getConfig()->getAttribute('sonata_admin_enabled', true)) {
@@ -142,7 +144,8 @@ class FormTypeFieldExtension extends AbstractTypeExtension
             $view->vars['sonata_admin_enabled'] = false;
         }
 
-        $view->vars['sonata_admin'] = $sonataAdmin;
+        $view->vars['sonata_admin_help'] = $sonataAdminHelp;
+        $view->vars['sonata_admin']      = $sonataAdmin;
     }
 
     /**
@@ -168,6 +171,7 @@ class FormTypeFieldExtension extends AbstractTypeExtension
 
             // be compatible with mopa if not installed, avoid generating an exception for invalid option
             'label_render'             => true,
+            'sonata_admin_help'        => null
         ));
     }
 

+ 24 - 0
Resources/doc/reference/form_help_message.rst

@@ -46,6 +46,29 @@ Alternative Way To Define Help Messages
         }
     }
 
+Help messages in a sub-field
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. code-block:: php
+
+    <?php
+    class ExampleAdmin.php
+    {
+        protected function configureFormFields(FormMapper $formMapper)
+        {
+            $formMapper
+                ->add('enabled')
+                ->add('settings', 'sonata_type_immutable_array', array(
+                    'keys' => array(
+                        array('content', 'textarea', array(
+                            'sonata_admin_help' => 'Set the content'
+                        )),
+                        array('public', 'checkbox', array()),
+                    )
+                );
+        }
+    }
+
 
 Advanced usage
 ^^^^^^^^^^^^^^
@@ -78,3 +101,4 @@ Example
         }
     }
 
+

+ 7 - 0
Resources/views/Form/form_admin_fields.html.twig

@@ -11,6 +11,13 @@ file that was distributed with this source code.
 
 {% extends 'form_div_layout.html.twig' %}
 
+{% block form_widget -%}
+    {{ parent() }}
+    {% if sonata_admin_help is defined and sonata_admin_help %}
+        <span class="help-block sonata-ba-field-widget-help">{{ sonata_admin_help|raw }}</span>
+    {% endif %}
+{%- endblock form_widget %}
+
 {% block form_widget_simple %}
     {% set attr = attr|merge({'class': attr.class|default('') ~ ' form-control'}) %}
     {{ parent() }}

+ 6 - 1
Tests/Form/Extension/Field/Type/FormTypeFieldExtensionTest.php

@@ -39,9 +39,11 @@ class FormTypeFieldExtensionTest extends \PHPUnit_Framework_TestCase
 
         $this->assertArrayHasKey('sonata_admin', $options);
         $this->assertArrayHasKey('sonata_field_description', $options);
+        $this->assertArrayHasKey('sonata_admin_help', $options);
 
         $this->assertNull($options['sonata_admin']);
         $this->assertNull($options['sonata_field_description']);
+        $this->assertNull($options['sonata_admin_help']);
     }
 
     public function testbuildViewWithNoSonataAdminArray()
@@ -96,7 +98,9 @@ class FormTypeFieldExtensionTest extends \PHPUnit_Framework_TestCase
         $formView->vars['block_prefixes'] = array('form', 'field', 'text', '_s50b26aa76cb96_username');
 
         $extension = new FormTypeFieldExtension();
-        $extension->buildView($formView, $form, array());
+        $extension->buildView($formView, $form, array(
+            'sonata_admin_help' => 'help text'
+        ));
 
         $this->assertArrayHasKey('block_prefixes', $formView->vars);
         $this->assertArrayHasKey('sonata_admin_enabled', $formView->vars);
@@ -113,5 +117,6 @@ class FormTypeFieldExtensionTest extends \PHPUnit_Framework_TestCase
 
         $this->assertEquals($expected, $formView->vars['block_prefixes']);
         $this->assertTrue($formView->vars['sonata_admin_enabled']);
+        $this->assertEquals('help text', $formView->vars['sonata_admin_help']);
     }
 }