0

プロジェクトを作成するために Symfony 1.4 を使用しています。データベースからの質問セットの種類に応じて動的フォームを作成する必要があります。プロジェクトの残りの部分で Symfony フォームを使用しましたが、この場合、動的フォームが必要なため、symfony フォームを使用するのは難しいようです。symfony プロジェクトで通常の HTML フォームを使用しても安全でしょうか、または Symfony フォームを使用することをお勧めします。あなたの助けが必要です。

4

2 に答える 2

2

htmlフォームを使用できますが、symfonyのフォーム検証システムをバイパスします。

入力ウィジェットを作成して現在のフォームに追加するか、アクション内に新しいフォームを追加することで、動的フォームを作成できます。次に、フォームをテンプレートにエコーすると、動的に生成されたフィールドもフォームの一部になります。

lib / formsの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」入力がフォームに追加されます。

于 2010-09-30T17:22:47.650 に答える
1

あなたが何をしているかについてもっと情報を持っていると役に立ちますが、Symfony でフォームを動的にする 1 つの方法を次に示します。このコードは、質問の「タイプ」に基づいて動的に調査のウィジェットとバリデーターを作成します。

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
}

注: この回答は私のプロジェクトの 1 つからのコードですが、SymfonyExperts に関するこの回答の影響を大きく受けました。

于 2010-10-01T01:02:00.443 に答える