تقديم نفس النموذج المتكرر في symfony لإدراج السائبة

StackOverflow https://stackoverflow.com/questions/3088178

سؤال

كنت أحاول طوال اليوم القيام بإدراج متعددة لنفس النموذج بناءً على رقم ولم أستطع الذهاب إلى أي مكان معه. أتمنى أن يساعدني شخص ما هنا ...

أنا أستخدم مولد المسؤول على 1.4 عقيدة. لدي نموذج أنشأته مع حقلين فقط. ما أحاول فعله هو ، بناءً على رقم تم إدخاله ، سيتم تكرار عدد المرات.

في ملف المولد ، أضفت جزئيًا وضع حقل نص في بداية النموذج مع القيمة الافتراضية 1. إذا اخترت 2 النموذج أدناه يتم تكراره مرتين ..

هذا ما فعلته في النموذج .. في العمل

class prizesActions extends autoPrizesActions

{الوظيفة العامة executeNew (sfwebrequest $ request) {

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

} }

وفي الجوائز ، كتبت ما يلي

class PrizesForm extends BasePrizesForm

{الوظيفة العامة configure () {$ array = $ this-> getOptions () ؛ لـ ($ i = 0 ؛ $ i <$ array ['n'] ؛ $ i ++) {

    $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']
        );  

} }

أعتقد أن الحلقة تعمل ولكنها أكثر من كتابة أجهزة التشغيل في كل إدخال ولا يمكنني العثور على طريقة أخرى لإلحاقها بدلاً من ذلك. أيه أفكار؟

شكرًا،

هل كانت مفيدة؟

المحلول

هل حاولت تضمين ()؟ الرمز أدناه يجب أن يعطيك فكرة.

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]');
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top