/** * @param RZ\Roadiz\Core\Entities\Node $node * @param RZ\Roadiz\Core\Entities\NodesSources $source * * @return \Symfony\Component\Form\Form */ private function buildEditSourceForm(Node $node, NodesSources $source) { $fields = $node->getNodeType()->getFields(); /* * Create source default values */ $sourceDefaults = ['title' => $source->getTitle()]; foreach ($fields as $field) { if (!$field->isVirtual()) { $getter = $field->getGetterName(); if (method_exists($source, $getter)) { $sourceDefaults[$field->getName()] = $source->{$getter}(); } else { throw new \Exception($getter . ' method does not exist in ' . $node->getNodeType()->getName()); } } } /* * Create subform for source */ $sourceBuilder = $this->getService('formFactory')->createNamedBuilder('source', 'form', $sourceDefaults)->add('title', 'text', ['label' => $this->getTranslator()->trans('title'), 'required' => false, 'attr' => ['data-desc' => '', 'data-dev-name' => '{{ nodeSource.' . StringHandler::camelCase('title') . ' }}']]); foreach ($fields as $field) { $sourceBuilder->add($field->getName(), $this->getFormTypeFromFieldType($source, $field, $this), $this->getFormOptionsFromFieldType($field)); } return $sourceBuilder->getForm(); }