ソースを参照

fix value retrieval on one-to-many with edit=list option

Thomas 14 年 前
コミット
52dedf57f1

+ 3 - 1
Resources/views/CRUD/edit_one_to_many.html.twig

@@ -19,12 +19,14 @@ file that was distributed with this source code.
                     <table>
                         {% for nested_group_field_name, nested_group_field in field_element.fields %}
                             <tr>
+                                {% set parent_loop = loop %}
                                 {% for field_name, nested_field in nested_group_field.fields %}
                                     <td>
                                         {% if field_description.associationadmin.formfielddescriptions[field_name] is defined %}
                                             {{ field_description.associationadmin.formfielddescriptions[field_name]|render_form_element(
                                                 nested_group_field,
-                                                value
+                                                value,
+                                                { 'loop': parent_loop }
                                             ) }}
                                         {% else %}
                                             {{ form_field(nested_field) }}

+ 7 - 4
Twig/Extension/SonataBaseApplicationExtension.php

@@ -11,7 +11,6 @@
 
 namespace Sonata\BaseApplicationBundle\Twig\Extension;
 
-
 use Sonata\BaseApplicationBundle\Admin\FieldDescription;
 use Sonata\BaseApplicationBundle\Filter\Filter;
 
@@ -95,11 +94,15 @@ class SonataBaseApplicationExtension extends \Twig_Extension
      * @param FieldDescription $fieldDescription
      * @return
      */
-    public function getValueFromFieldDescription($object, FieldDescription $fieldDescription)
+    public function getValueFromFieldDescription($object, FieldDescription $fieldDescription, array $params = array())
     {
 
-        $value = $fieldDescription->getValue($object);
+        if(isset($params['loop']) && $object instanceof \ArrayAccess) {
+            $object = $object[$params['loop']['index0']];
+        }
 
+        $value = $fieldDescription->getValue($object);
+        
         // no value defined, check if the fieldDescription point to an association
         // if so, create an empty object instance
         // fixme: not sure this is the best place to do that
@@ -182,7 +185,7 @@ class SonataBaseApplicationExtension extends \Twig_Extension
             'admin'             => $fieldDescription->getAdmin(),
             'object'            => $object,
             'field_description' => $fieldDescription,
-            'value'             => $this->getValueFromFieldDescription($object, $fieldDescription),
+            'value'             => $this->getValueFromFieldDescription($object, $fieldDescription, $params),
             'field_element'     => $field,
             'base_template'     => $fieldDescription->getOption('base_template', $base_template)
         ))));