2017-02-22 76 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 for answers!


編輯:整個代碼是這樣

控制器

$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'%}。沒有「形式」功能,這將是無用的... –