With 1.2 around the corner I'm taking my first crack at the new form
system brought by the 1.1 release.  I need to make a form which is
essentially made up of a bunch of inner forms.

I'll post my schema at the bottom.  Basically I have a table of
Skills, just consist of a name, description and group the skill
belongs to.  Then I have a table named SkillReport which is just a
name and descrtiption, and finally a table named SkillPerson which
combines a skill_id, skill_report_id, sf_guard_user_id, and rating.
Basically ties everything together to keep track of a skill for a
given person in that report.

So I need to make a form which contains many SkillPerson's after going
around in circles of trying to make a single form object with a
skill_person[rating][0]  where 0 is the skill_id, I stumbled upon
embedForm.  Using this
I'm able to make my own form which embed multiple  SkillPeron forms.
{{{
#!php
    $Skills = Doctrine::getTable('Skill')->findAll();
    foreach ( $Skills as $Skill ) {
      $SkillPerson = new SkillPerson();
      $SkillPerson['skill_report_id'] = 1;
      $SkillPerson['sf_guard_user_id'] = 2;
      $SkillPerson['skill_id'] = $Skill['id'];
      $this->embedForm("rating[{$Skill['id']}]", new
SkillPersonForm($SkillPerson));
    }
}}}
It displays correctly but I'm having a hard time with the bind
function in my action and validation.  Validation is all over the
place.

It would be greatly helpful if someone could post an example of using
the embedForm functionality as well as validating it and using it's
values.  Below is the schema.yml, the SkillFillOutReportForm.class.php
(my custom form), and SkillPersonForm.clas.php (the modified generated
form, and my action.

Thanks for any help in advance.

{{{
#yml
#schema.yml
SkillGroup:
  columns:
    name: string
    description: string

Skill:
  columns:
    skill_group_id: integer
    name: string
    description: string
  relations:
    Group:
      class: SkillGroup

SkillReport:
  columns:
    name: string
    description: string
    date: timestamp
    deadline: timestamp

SkillPerson:
  columns:
    skill_id: integer
    sf_guard_user_id: integer(4)
    skill_report_id: integer
    rating: integer(2)
  relations:
    User:
      class: sfGuardUser
    Skill:
      class: Skill
    Report:
      class: SkillReport
}}}

{{{
#!php
//  SkillFillOutReportForm.class.php
class SkillFillOutReportForm extends sfForm
{
  public function setup()
  {
    $Skills = Doctrine::getTable('Skill')->findAll();
    foreach ( $Skills as $Skill ) {
      $SkillPerson = new SkillPerson();
      $SkillPerson['skill_report_id'] = 1;
      $SkillPerson['sf_guard_user_id'] = 2;
      $SkillPerson['skill_id'] = $Skill['id'];
      $this->embedForm("rating[{$Skill['id']}]", new
SkillPersonForm($SkillPerson));
    }
    $this->widgetSchema->setNameFormat('skill_person[%s]');
    $this->errorSchema = new sfValidatorErrorSchema($this-
>validatorSchema);
    parent::setup();
  }
}
}}}

{{{
#!php
// SkillPersonForm.class.php
class SkillPersonForm extends BaseSkillPersonForm
{
  public function configure()
  {
     unset($this['created_at'], $this['updated_at'], $this['slug']);
     $this->setWidgets(array(
     'sf_guard_user_id' => new sfWidgetFormInputHidden(),
     'skill_report_id'  => new sfWidgetFormInputHidden(),
     'rating'           => new sfWidgetFormChoice(array(
         'choices' => SkillPersonTable::getRatingChoices(),
         'expanded' => true))
     ));
     $this->setValidators(array(
      'sf_guard_user_id' => new
sfValidatorDoctrineChoice(array('model' => 'sfGuardUser', 'required'
=> true)),
      'skill_report_id'  => new
sfValidatorDoctrineChoice(array('model' => 'SkillReport', 'required'
=> true)),
      'rating'           => new sfValidatorChoice(array('choices' =>
array_keys(SkillPersonTable::getRatingChoices()))),
     ));
  }
}
}}}

{{{
#!php
//actions.class.php
public function executeFillOut($request)
  {
    $this->form = new SkillFillOutReportForm();
    if ($request->isMethod('post'))
    {
      $this->form->bind($request->getParameter('skill_person'));
      if ($this->form->isValid())
      {
        $values = $this->form->getValues();
      }
    }
  }
}}}
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"symfony users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/symfony-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to