2017-02-22 16 views
0

私はいくつかのフォームタイプを持っています。それから私はフォームを作成しています。このように:小枝でsymfonyはtwigフォームテーマのエンティティ名を取得します

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

、私はこのフォームのテーマで

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

を使用しています、私は、プロパティ名とエンティティ名を取得したいです。

{{ form.vars.name }} 

しかし、私はマッピングされたエンティティ名を取得する方法を見つけ出すことができません:私は(。{%ブロックform_widgetの%}で例えば)このようなプロパティ名を取得することができます。この場合、私はちょうど\AppBundle\Entity\Application() or AppBundle:Applicationのようなものを(データ属性として使うために)このフォームのテーマに入れたいと思っています。

一般的な方法でこの値を取得できますか?はい、私は各FormTypeなどで設定することができますが、私はよりエレガントな方法を探しています。

回答のためのThx!


EDIT:全体のコードは

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

コントローラ

$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) }} 

ようなものです

答えて

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'%}を使っていると書いています。 "フォーム"機能がなければ、役に立たないでしょう... –

関連する問題