2017-02-22 10 views
0

У меня есть тип формы. Затем я создаю форму, например. как это:Symfony получить имя субъекта в форме темы твита

$application = new \AppBundle\Entity\Application(); 
$applicationWidgetForm = $this->formFactory->create(\AppBundle\Form\WidgetApplicationType::class, $application); 

В прутик, я использую

{% form_theme applicationWidgetForm 'form.html.twig' %} 

В этой форме теме, я хочу, чтобы получить имя свойства и имя объекта. Я могу получить имя свойства, как это (например, в {% блок form_widget%}.):

{{ form.vars.name }} 

Но я не могу понять, как получить отображенный имя объекта. В этом случае я просто хочу получить что-то вроде \AppBundle\Entity\Application() or AppBundle:Application в этой форме темы (для использования в качестве атрибута данных).

Возможно ли получить это значение в общем виде? Да, я могу установить его в каждом FormType и т. Д. Но я ищу более элегантный способ.

Thx для ответов!


EDIT: весь код что-то вроде этого

контроллер

$application = new \AppBundle\Entity\Application(); 
$applicationWidgetForm = $this->formFactory->create(\AppBundle\Form\WidgetApplicationType::class, $application); 
return $this->render('form/application_detail.html.twig', [ 
     'applicationForm' => $applicationWidgetForm->createView(), 
    ]); 

форма/application_detail.html.twig

{% form_theme applicationForm 'form.html.twig' %} 
{{ form(applicationForm) }} 

form.html.twig

{% block form_widget %} 
{{ form.vars.name }} # with this, I can get property name. But what about entity name/class? 
{% endblock form_widget %} 

ответ

0

В конце концов я сделал это с помощью TypeExtension

class TextTypeExtension extends AbstractTypeExtension { 

/** 
* Returns the name of the type being extended. 
* 
* @return string The name of the type being extended 
*/ 
public function getExtendedType() { 
    return TextType::class; 
} 

public function buildView(\Symfony\Component\Form\FormView $view, \Symfony\Component\Form\FormInterface $form, array $options) { 
    $propertyName = $view->vars['name']; 
    $entity = $form->getParent()->getData(); 

    $validationGroups = $form->getParent()->getConfig()->getOption('validation_groups'); 

    if ($entity) { 
     if (is_object($entity)) { 

      $entityName = get_class($entity); //full entity name 
      $entityNameArr = explode('\\', $entityName); 

      $view->vars['attr']['data-validation-groups'] = serialize($validationGroups); 
      $view->vars['attr']['data-entity-name'] = array_pop($entityNameArr); 
      $view->vars['attr']['data-property-name'] = $propertyName; 
     } 
    } 
} 

} 
0

Вы передали свою сущность в шаблон твига? Когда вы создаете шаблон Twig, вы можете передать переменные View. В вашем контроллере:

return $this->render('your_own.html.twig', [ 
    'entity' => $application, 
]); 

Но обратите внимание, что ваше сущность пуста. Возможно, вы хотите отображать форму вместо объекта? Чем вам нужно передать форму в поле зрения

return $this->render('your_own.html.twig', [ 
    'form' => $applicationWidgetForm->createView(), 
]); 

и render the form на ваш взгляд.

+0

Я не предоставил весь код. Я хочу получить имя объекта в form_theme, поэтому я подумал, ясно, что я также использую {{form (applicationWidgetForm)}}. Вот почему я написал, что использую {% form_theme applicationWidgetForm 'form.html.twig'%}. Без функции «формы» это было бы бесполезно ... –

Смежные вопросы