symfony sfForm cheat sheet
Get list/array of field names
$form->getWidgetSchema()->getPositions();
Custom render form
<table>
<thead>
<?php foreach ($form as $position): ?>
<th>
<?php echo $position->renderLabel() ?>
</th>
<?php endforeach ?>
</thead>
<tbody>
<tr>
<?php foreach ($form as $position): ?>
<td>
<?php echo $position->render() ?>
<?php echo $position->renderError() ?>
</td>
<?php endforeach ?>
</tr>
</tbody>
</table>
Move a form field
* Moves a field in a given position * * Available actions are: * * * sfWidgetFormSchema::BEFORE * * sfWidgetFormSchema::AFTER * * sfWidgetFormSchema::LAST * * sfWidgetFormSchema::FIRST * * @param string $field The field name to move * @param constant $action The action (see above for all possible actions) * @param string $pivot The field name used for AFTER and BEFORE actions
$this->getWidgetSchema()->moveField('is_active', sfWidgetFormSchema::AFTER, 'created_at');
Embeded forms
http://jmather.com/2011/01/29/6-things-to-know-about-embedded-forms-in-symfony/
http://arialdomartini.wordpress.com/2011/04/01/how-to-kill-symfony%E2%80%99s-forms-and-live-well/
Render an embeded form:
// "attributes" is the name of the "field" for the embeded form
echo $form->offsetGet('attributes')->render();
Render a field of an embeded form:
echo $form->offsetGet('attributes')->offsetGet('my_field')->render();
Distinguish between a field and an embeded form:
- A field is instance of 'sfFormField'
- A embeded form is instance of 'sfFormFieldSchema'
Global / Post Validators
Make one field required depending on the status of another
protected function modifyGeneratorAfterBuildForm($row)
{
$form = $this->generator->getForm();
$form->mergePostValidator(
new sfValidatorCallback(array('callback' => array($this, 'validatePaymentType')))
);
}
protected function validatePaymentType($validator, $values)
{
if (!$values['is_paid'] && !$values['ull_payment_type_id'])
{
$error = new sfValidatorError($validator, 'Required');
// throw an error bound to the password field
throw new sfValidatorErrorSchema($validator, array('ull_payment_type_id' => $error));
}
return $values;
}
Architecture
- sfForm
- widgetSchema
- class sfWidgetFormSchema
- validatorSchema
- errorSchema
- formFieldSchema
- getFormFieldSchema()
- If none exists, it is created on the fly using widgetSchema and values:
- if not bound - defaults
- if bound - tainted values (post request data)
- If none exists, it is created on the fly using widgetSchema and values:
- getFormFieldSchema()
- formFields
- defaults
- fieldNames
- widgetSchema
- sfWidgetFormSchema
- represents an array of fields.
- Seems to be an array of widgets
- sfFormField
- represents a widget bind to a name and a value.
- sfFormFieldSchema
- represents an array of widgets bind to names and values

