/** * @param FieldDescriptionInterface $fieldDescription * @param \Twig_Template $template * @param array $parameters * * @return string */ public function output(FieldDescriptionInterface $fieldDescription, \Twig_Template $template, array $parameters, \Twig_Environment $environment) { $content = $template->render($parameters); if ($environment->isDebug()) { $commentTemplate = <<<EOT <!-- START fieldName: %s template: %s compiled template: %s --> %s <!-- END - fieldName: %s --> EOT; return sprintf($commentTemplate, $fieldDescription->getFieldName(), $fieldDescription->getTemplate(), $template->getTemplateName(), $content, $fieldDescription->getFieldName()); } return $content; }
/** * @param FieldDescriptionInterface $fieldDescription * @param \Twig_Template $template * @param array $parameters * * @return string */ public function output(FieldDescriptionInterface $fieldDescription, \Twig_Template $template, array $parameters = array()) { $content = $template->render($parameters); if ($this->environment->isDebug()) { return sprintf("\n<!-- START \n fieldName: %s\n template: %s\n compiled template: %s\n -->\n%s\n<!-- END - fieldName: %s -->", $fieldDescription->getFieldName(), $fieldDescription->getTemplate(), $template->getTemplateName(), $content, $fieldDescription->getFieldName()); } return $content; }
/** * attach an admin instance to the given FieldDescription * * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription */ public function attachAdminClass(FieldDescriptionInterface $fieldDescription) { $pool = $this->getConfigurationPool(); $admin = $pool->getAdminByClass($fieldDescription->getTargetEntity()); if (!$admin) { throw new \RuntimeException(sprintf('You must define an Admin class for the `%s` field (targetEntity=%s)', $fieldDescription->getFieldName(), $fieldDescription->getTargetEntity())); } $fieldDescription->setAssociationAdmin($admin); }
/** * render a field element from the FieldDescription * * * @throws InvalidArgumentException * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription * @param \Sumfony\Component\Form\FormView $formView * @param mixed $object * @param array $params * @return string */ public function renderFormElement(FieldDescriptionInterface $fieldDescription, FormView $formView, $object, $params = array()) { if (!$fieldDescription->getFieldName()) { return ''; } if (!$formView->offsetExists($fieldDescription->getFieldName())) { throw new \RuntimeException(sprintf('No child named %s', $fieldDescription->getFieldName())); } $children = $formView->offsetGet($fieldDescription->getFieldName()); if (in_array('hidden', $children->get('types'))) { return ''; } // find the correct edit parameter // edit : standard | inline // inline : natural | table $parentFieldDescription = $fieldDescription->getAdmin()->getParentFieldDescription(); if (!$parentFieldDescription) { $params['edit'] = $fieldDescription->getOption('edit', 'standard'); $params['inline'] = $fieldDescription->getOption('inline', 'natural'); $base_template = sprintf('SonataAdminBundle:CRUD:base_%s_edit_field.html.twig', 'standard'); } else { $params['edit'] = $parentFieldDescription->getOption('edit', 'standard'); $params['inline'] = $parentFieldDescription->getOption('inline', 'natural'); $base_template = sprintf('SonataAdminBundle:CRUD:base_%s_edit_field.html.twig', $params['edit']); } $template = $this->environment->loadTemplate($fieldDescription->getTemplate()); return $this->output($fieldDescription, $template->render(array_merge($params, array('admin' => $fieldDescription->getAdmin(), 'object' => $object, 'field_description' => $fieldDescription, 'value' => $this->getValueFromFieldDescription($object, $fieldDescription, $params), 'field_element' => $children, 'base_template' => $fieldDescription->getOption('base_template', $base_template))))); }
/** * Returns the OneToMany associated field * * @param \Symfony\Component\Form\FormBuilder $formBuilder * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription * @return \Symfony\Component\Form\Type\FormTypeInterface */ protected function getOneToManyField(FormBuilder $formBuilder, FieldDescriptionInterface $fieldDescription) { if ($fieldDescription->getOption('edit') == 'inline') { // create a collection type with the generated prototype $options = $fieldDescription->getOption('form_field_options', array()); $options['type'] = 'sonata_type_admin'; $options['modifiable'] = true; $options['type_options'] = array('field_description' => $fieldDescription); $formBuilder->add($fieldDescription->getFieldName(), 'sonata_type_collection', $options); return; // $value = $fieldDescription->getValue($formBuilder->getData()); // // // add new instances if the min number is not matched // if ($fieldDescription->getOption('min', 0) > count($value)) { // // $diff = $fieldDescription->getOption('min', 0) - count($value); // foreach (range(1, $diff) as $i) { // $this->addNewInstance($formBuilder->getData(), $fieldDescription); // } // } // use custom one to expose the newfield method // return new \Sonata\AdminBundle\Form\EditableCollectionField($prototype); } return $this->defineManyToManyField($formBuilder, $fieldDescription); }