|
@@ -20,6 +20,9 @@ use Symfony\Component\OptionsResolver\Options;
|
|
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
|
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
|
|
|
|
|
use Sonata\AdminBundle\Form\DataTransformer\ArrayToModelTransformer;
|
|
use Sonata\AdminBundle\Form\DataTransformer\ArrayToModelTransformer;
|
|
|
|
+use Symfony\Component\PropertyAccess\Exception\NoSuchIndexException;
|
|
|
|
+use Symfony\Component\PropertyAccess\PropertyAccess;
|
|
|
|
+use Symfony\Component\PropertyAccess\PropertyAccessor;
|
|
|
|
|
|
class AdminType extends AbstractType
|
|
class AdminType extends AbstractType
|
|
{
|
|
{
|
|
@@ -42,6 +45,21 @@ class AdminType extends AbstractType
|
|
$builder->add('_delete', $options['delete_options']['type'], $options['delete_options']['type_options']);
|
|
$builder->add('_delete', $options['delete_options']['type'], $options['delete_options']['type_options']);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // hack to make sure the subject is correctly set
|
|
|
|
+ // https://github.com/sonata-project/SonataAdminBundle/pull/2076
|
|
|
|
+ if ($builder->getData() === null) {
|
|
|
|
+ $p = new PropertyAccessor(false, true);
|
|
|
|
+ try {
|
|
|
|
+ $subject = $p->getValue(
|
|
|
|
+ $admin->getParentFieldDescription()->getAdmin()->getSubject(),
|
|
|
|
+ $this->getFieldDescription($options)->getFieldName().$options['property_path']
|
|
|
|
+ );
|
|
|
|
+ $builder->setData($subject);
|
|
|
|
+ } catch (NoSuchIndexException $e) {
|
|
|
|
+ // no object here
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
$admin->setSubject($builder->getData());
|
|
$admin->setSubject($builder->getData());
|
|
|
|
|
|
$admin->defineFormBuilder($builder);
|
|
$admin->defineFormBuilder($builder);
|