Fabien,
Thanks. I was able to figure this out by creating a new sfWidgetFormSchema
inside the form. One more question. Why can I not set the "value" of a
checkbox? This seemed to be the best option, but still didn't work:
new sfWidgetFormInputCheckbox(array(), array('value' => $value));
Any reason why I can't set the value?
Thanks,
-- Ian
----- Original Message -----
From: "Fabien Potencier" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Tuesday, June 03, 2008 2:31 AM
Subject: [symfony-devs] Re: Dynamic checkbox arrays for sfForms in 1.1
You can manipulate the widget and validator schemas as if they were
arrays... except they are not. Instead of creating an array, you need to
create a sfWidgetSchema, which behaves like an array.
So, in your case, you have 2 options:
* Create a form for your collection of widgets and embed it: symfony
will do the ground work for you
* Do everything by hand
Here is an example for the first option:
<?php
class ThingForm extends sfForm
{
public function configure()
{
// ...
$this->embedForm('group', new checkboxesCollectionForm());
}
}
class checkboxesCollectionForm extends sfForm
{
public function configure()
{
foreach (array('foo', 'bar') as $value)
{
$this->widgetSchema[$value] = new sfWidgetFormInputCheckbox();
$this->validatorSchema[$value] = new sfValidatorPass();
}
}
}
I've attached a screenshot for this example.
And here is the exact same example but you do everything by yourself:
<?php
class ThingForm extends sfForm
{
public function configure()
{
// ...
$this->widgetSchema['group'] = new sfWidgetFormSchema();
$this->validatorSchema['group'] = new sfValidatorSchema();
foreach (array('foo', 'bar') as $value)
{
$this->widgetSchema['group'][$value] = new
sfWidgetFormInputCheckbox();
$this->validatorSchema['group'][$value] = new sfValidatorPass();
}
}
}
If you want to use the <?php echo $form ?> statement, you will have to
decorate the collection like this:
$this->widgetSchema['group'] = new
sfWidgetFormSchemaDecorator($this->widgetSchema['group'],
$this->widgetSchema['group']->getFormFormatter()->getDecoratorFormat());
Fabien
Ian wrote:
> One additional note. It's often common to have one "label" for the
> entire collection of checkboxes. So i'd like to be able to do this as
> well.
>
> On Jun 2, 5:16 pm, "Slick Rick" <[EMAIL PROTECTED]> wrote:
>> I'm trying to create a dynamic list of "groups", that can be selected via
>> checkboxes. What is the best way to create this "collection" of checkbox
>> widgets in my form class so it is handled by the rendering engine as well
>> as validation and error handling?
>>
>> I tried to do this:
>>
>> foreach ($groups as $group)
>> {
>> $schema['group'][] = new sfWidgetFormInputCheckbox(array(),
>> array('value' => $group['id']));
>>
>> }
>>
>> ... but when I try to render it, it tells me Widget "group" does not
>> exist. Even if try to echo $form['group'][0]->render(). Same error.
>>
>> Is there some internal mechanism that can handle groups of form elements
>> properly?
>>
>> Thanks for any help...
>>
>> -- Ian
> >
--
Fabien Potencier
Sensio CEO - symfony lead developer
sensiolabs.com | symfony-project.com | aide-de-camp.org
Tél: +33 1 40 99 80 80
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"symfony developers" 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-devs?hl=en
-~----------~----~----~----~------~----~------~--~---