Рендеринг такой же формы повторяется в Symfony для массовой вставки - PullRequest
1 голос
/ 22 июня 2010

Я весь день пытался сделать несколько вставок для одной и той же формы на основе числа, и я не мог пойти куда-нибудь с ним. Я надеюсь, что кто-то здесь поможет мне ...

Я использую генератор администратора по доктрине 1.4. У меня есть форма, которую я создал только с двумя полями. то, что я пытаюсь сделать, на основании введенного числа, форма будет повторяться x раз.

В файле генератора я добавил частичное, которое поместило текстовое поле в начало формы со значением по умолчанию, равным 1. Если я выберу 2, форма ниже дублируется дважды ..

Вот что я сделал с моей формой .. В действии

class prizesActions extends autoPrizesActions

{ публичная функция executeNew (sfWebRequest $ request) {

$this->form = $this->configuration->getForm(null, array('n' => 5));
$this->prizes = $this->form->getObject();

} }

и в PrizesForm я написал следующее

class PrizesForm extends BasePrizesForm

{ публичная функция configure () { $ array = $ this-> getOptions (); для ($ i = 0; $ i <$ array ['n']; $ i ++) {</p>

    $this->setWidgets(array(
      'id'         => new sfWidgetFormInputHidden(),
      'prize_no'   => new sfWidgetFormInputText(),
      'prize'      => new sfWidgetFormInputText(),
      'created_at' => new sfWidgetFormDateTime(),
      'updated_at' => new sfWidgetFormDateTime(),
    ));

    $this->setValidators(array(
      'id'         => new sfValidatorDoctrineChoice(array('model' => $this->getModelName(), 'column' => 'id', 'required' => false)),
      'prize_no'   => new sfValidatorInteger(array('required' => false)),
      'prize'      => new sfValidatorString(array('max_length' => 200, 'required' => false)),
      'created_at' => new sfValidatorDateTime(),
      'updated_at' => new sfValidatorDateTime(),
    ));

    $this->widgetSchema->setNameFormat('prizes['.$i.'][%s]');

    $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
}





unset(  $this['updated_at'],
        $this['created_at']
        );  

} } * * Тысяча двадцать-один

Я думаю, что цикл работает, но он перезаписывает виджеты при каждой записи, и я не могу найти другой метод для добавления вместо него. Есть идеи?

Спасибо

1 Ответ

1 голос
/ 08 июля 2010

Вы пробовали embedForm ()?Код ниже должен дать вам представление.

class PrizesForm extends BasePrizesForm
{
  public function configure() 
  { 
    $this->setWidgets(array(
      'id'         => new sfWidgetFormInputHidden(),
      'prize_no'   => new sfWidgetFormInputText(),
      'prize'      => new sfWidgetFormInputText(),
      'created_at' => new sfWidgetFormDateTime(),
      'updated_at' => new sfWidgetFormDateTime(),
    ));

    $this->setValidators(array(
      'id'         => new sfValidatorDoctrineChoice(array('model' => $this->getModelName(), 'column' => 'id', 'required' => false)),
      'prize_no'   => new sfValidatorInteger(array('required' => false)),
      'prize'      => new sfValidatorString(array('max_length' => 200, 'required' => false)),
      'created_at' => new sfValidatorDateTime(),
      'updated_at' => new sfValidatorDateTime(),
    ));

    $this->widgetSchema->setNameFormat('prizes[%s]');
  }
}

class PrizesGroupForm extends sfForm
{
  public function configure() 
  { 
    $array = $this->getOptions();

    for ($i = 0; $i < $array['n']; $i++) 
    {
      $this->embedForm('prizes_' . $i, new PrizesForm());
    }

    $this->widgetSchema->setNameFormat('prizes_group[%s]');
  }
}
...