2010-09-30 54 views
0

我正在使用Symfony 1.4創建項目,我需要根據來自數據庫的問題集類型創建動態窗體。我在我的項目的其餘部分中使用了Symfony窗​​體,但在這種情況下,使用symfony窗​​體似乎很難,因爲我需要動態窗體。 在symfony項目中使用普通的HTML格式是否安全?或者建議使用Symfony格式。所以需要你的幫助。Symfony窗​​體或正常的HTML表單

+0

你能提供更多關於你想要做什麼的信息嗎? 「動態」形式 - 它們是如何動態的?無論您想要做什麼,Symfony幾乎都可以做到。 – 2010-09-30 21:02:47

+0

@jeremy,對不起,我coudnt解釋非常..動態形式我的意思是...形式將在運行時創建取決於數據庫..就像它有n個選擇...和元素的類型(即HTML元素)將取決於問題類型(如果單選擇然後選擇元素,如果多個然後複選框..),我希望它是明確的.. – 2010-10-01 06:29:22

+0

以前我使用經典的PHP,做同樣..在那個時候我通過PHP代碼創建了這些問題集表單...並使用了JavaScript .. – 2010-10-01 06:30:56

回答

2

您可以使用html表單,但它會繞過symfony的表單驗證系統。

您仍然可以通過創建和添加輸入窗口小部件到當前窗體或動作中的新窗體來構建動態窗體。然後,您可以在模板中回顯表單,並且動態生成的字段也將成爲表單的一部分。

如果你開始在lib /表格一MyForm.class.php,確保添加:

$this->validatorSchema->setOption('allow_extra_fields', true); 

否則,您將自動獲得驗證錯誤。如果你想字段添加到表單中的動作,你會做這樣的事情:

$this->form = new MyForm(); 
$widgetSchema = $this->form->getWidgetSchema(); 
$widgetSchema['add_field'] = new sfWidgetFormInputText(); 

當您迴應表單中的「add_field」輸入將被添加到它。

+0

我會試試這個,因爲我想在運行時添加HTML元素,並且不支持Symfony表單驗證系統。 – 2010-10-01 06:35:04

1

這將有助於獲得更多關於您正在做的事情的信息,但這裏有一種方式可以在Symfony中動態表示。此代碼爲動態基礎上,一個問題的「類型」的調查創建控件和驗證:

class SurveyAnswerForm extends BaseSurveyAnswerForm 
{ 
    public function configure() 
    { 
    $question = $this->object->Question; 

    $method = sprintf('createWidgetAndValidatorFor%sInputType', $question->type); 
    $this->$method($question); 
    $this->getWidget('value')->setOption('label', $question->question); 
    $this->getValidator('value')->setOption('required', $question->required); 
    } 

    protected function createWidgetAndValidatorForTextFieldInputType(Question $question) 
    { 
    $this->setWidget('value', new sfWidgetFormInputText()); 
    $this->setValidator('value', new sfValidatorString()); 
    } 

    protected function createWidgetAndValidatorForTextAreaInputType(Question $question) 
    { 
    $this->setWidget('value', new wfWidgetFormTextareaAutosize()); 
    $this->setValidator('value', new sfValidatorString()); 
    } 

    //etc. for as many types as you require 
} 

注意:當這個答案是我的一個項目的代碼,它在很大程度上受到this answer在上SymfonyExperts影響。