/**
     * @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;
 }
示例#3
0
 /**
  * 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)))));
 }
示例#5
0
 /**
  * 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);
 }