2016-12-03 56 views
0

我正在學習使用symfony,並且所有看起來都非常棒,但我需要製作一些自定義表單,而且我不知道如何與我的情況進行交接。Symfony表單字段操作

有沒有辦法像Magento一樣基於xml定義文件構建動態表單?我想要實現的是構建表單,這些表單將在數據庫中具有鍵值存儲,具有在構建表單時決定的自定義自定義輸入類型,但作爲用戶/管理員的演示文稿,我想要在區域 - >部分上進行構建。

有沒有可能做到這一點?

謝謝。

+0

您可以使用symfony構建所有需要的東西,但不存在內置解決方案。 PS:請閱讀StackOverflow的指導,例如:[我可以在StackOverflow上詢問哪些主題?](http://stackoverflow.com/help/on-topic)和[我如何提出一個好問題?](http:/ /stackoverflow.com/help/how-to-ask)。 –

回答

2

不幸的是,Form Component不提供此功能。 但是,您可以自己實施它或使用第三方軟件包。

FormBuilderInterface是一個很好的說明性API爲form generation。 您可以定義自己的配置格式並使用它來構建表單。

例如:

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use DOMDocument; 

class XmlBasedFormType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     // Better if the format will be as similar to the FormBuilder options: 
     $formConfig = DOMDocument::loadXML(<<<'XML' 
      <form> 
       <field name="foo" type="text" label="Foo"/> 
       <field name="bar" type="textarea" label="Bar"/> 
       <field name="baz" type="checkbox" label="Baz"/> 
      </form> 
XML 
     ); 

     foreach ($formConfig->getElementsByTagName('field') as $fieldElement) { 
      $name = $fieldElement->getAttribute('name'); 
      $type = $fieldElement->getAttribute('type'); 
      $label = $fieldElement->getAttribute('label'); 

      // Build a form element: 
      $builder->add($name, $type, ['label' => $label]); 
     } 
    } 
} 

而且,Config Component可以是在這種情況下是有用的。

但是全部實現所有表單功能可能需要很多工作。 Сonsider使用第三方解決方案,如Dynamic Form Bundle。該包通過YAML配置文件生成Symfony表單。 (我對此解決方案有一定的經驗,並且效果很好。)

+0

聽起來很棒。你我的朋友引導我走得更清晰。我現在頭腦中有了這樣一個複雜的解決方案,但是你給我看了一條簡單的路徑。榮譽給你。 – Nebunel

+0

我很樂意提供幫助。但這些形式確實是一件複雜的事情,試圖用聲明來描述它們總是很困難。 – Timurib

+0

我會盡我所能,根據你告訴我的內容。基本上我想構建一個像magento風格的配置區域,因爲我不確定未來是否會添加更多配置鍵,並且我確實認爲使用xml定義輸入表單是最好的方法(即使它會會有點痛苦) – Nebunel