/** * Add a new instance to the related FieldDescriptionInterface value. * * @param object $object * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription * * @throws \RuntimeException */ public function addNewInstance($object, FieldDescriptionInterface $fieldDescription) { $instance = $fieldDescription->getAssociationAdmin()->getNewInstance(); $mapping = $fieldDescription->getAssociationMapping(); $method = sprintf('add%s', $this->camelize($mapping['fieldName'])); if (!method_exists($object, $method)) { $method = rtrim($method, 's'); if (!method_exists($object, $method)) { $method = sprintf('add%s', $this->camelize(Inflector::singularize($mapping['fieldName']))); if (!method_exists($object, $method)) { throw new \RuntimeException(sprintf('Please add a method %s in the %s class!', $method, ClassUtils::getClass($object))); } } } $object->{$method}($instance); }
/** * {@inheritdoc} */ public function addNewInstance($object, FieldDescriptionInterface $fieldDescription) { $instance = $fieldDescription->getAssociationAdmin()->getNewInstance(); foreach ($this->newLayoutBlockParameters as $attr => $value) { $method = sprintf('set%s', $this->camelize($attr)); $instance->{$method}($value); } $mapping = $fieldDescription->getAssociationMapping(); $method = sprintf('add%s', $this->camelize($mapping['fieldName'])); if (!method_exists($object, $method)) { $method = rtrim($method, 's'); if (!method_exists($object, $method)) { throw new \RuntimeException(sprintf('Please add a method %s in the %s class!', $method, get_class($object))); } } $object->{$method}($instance); }
/** * Add a new instance to the related FieldDescriptionInterface value * * @param object $object * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription * @return void */ public function addNewInstance($object, FieldDescriptionInterface $fieldDescription) { $instance = $fieldDescription->getAssociationAdmin()->getNewInstance(); $mapping = $fieldDescription->getAssociationMapping(); $method = sprintf('add%s', $this->camelize($mapping['fieldName'])); $object->$method($instance); }
/** * Add a new field type into the provided FormBuilder * * @param \Symfony\Component\Form\FormBuilder $formBuilder * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription * @return void */ public function addField(FormBuilder $formBuilder, FieldDescriptionInterface $fieldDescription) { // There is a bug in the GraphWalker, so for now we always load related associations // for more information : https://github.com/symfony/symfony/pull/1056 if ($formBuilder->getData() && in_array($fieldDescription->getType(), array(ClassMetadataInfo::ONE_TO_MANY, ClassMetadataInfo::MANY_TO_MANY, ClassMetadataInfo::MANY_TO_ONE, ClassMetadataInfo::ONE_TO_ONE))) { $value = $fieldDescription->getValue($formBuilder->getData()); $infos = $fieldDescription->getAssociationMapping(); if ($value instanceof $infos['targetEntity'] && $value instanceof \Doctrine\ORM\Proxy\Proxy) { $relatedId = 'get' . current($fieldDescription->getAdmin()->getModelManager()->getIdentifierFieldNames($infos['targetEntity'])); $value->{$relatedId}(); // force to load the lazy loading method __load in the proxy methode } } switch ($fieldDescription->getType()) { case ClassMetadataInfo::ONE_TO_MANY: $this->getOneToManyField($formBuilder, $fieldDescription); break; case ClassMetadataInfo::MANY_TO_MANY: $this->defineManyToManyField($formBuilder, $fieldDescription); break; case ClassMetadataInfo::MANY_TO_ONE: case ClassMetadataInfo::ONE_TO_ONE: $this->defineOneToOneField($formBuilder, $fieldDescription); break; default: list($type, $default_options) = $this->getFormTypeName($fieldDescription); $formBuilder->add($fieldDescription->getFieldName(), $type, array_merge($default_options, $fieldDescription->getOption('form_field_options', array()))); } }