PHP Symfony, exemple d’utilisation de widget et validateur

Voici des exemples d’utilisation des widgets et des validateurs symfony, liste mise a jour au fur et a mesure de mes besoins ^^

Widgets

sfWidgetFormDoctrineChoice

$this->widgetSchema['cat_id'] = new sfWidgetFormDoctrineChoice(array('label' => 'Category',
                                                                      'model' => 'hosts_categories',
                                                                      'add_empty' => true));

sfWidgetFormInputPassword

$this->widgetSchema['password'] = new sfWidgetFormInputPassword();

Validateurs

sfValidatorRegex

$this->validatorSchema['intervalle'] = new sfValidatorRegex(array('pattern' => '/^[0-9]{1}[i,m,d]{1}$/'));

sfValidatorOr

$this->validatorSchema['intervalle'] = new sfValidatorOr(array(new sfValidatorRegex(array('pattern' => '/^[0-9]{1}[i,m,d]{1}$/')),
                                                                new sfValidatorRegex(array('pattern' => '/^[0-9]{1}[i,m,d]{1};[0-9]{2}h[0-9]{2}$/'))));

sfValidatorAnd

$this->validatorSchema->setPostValidator(new sfValidatorAnd(array(new sfValidatorSchemaCompare('repassword',  sfValidatorSchemaCompare::EQUAL, 'password'),
                                                                  new sfValidatorDoctrineUnique(array('model' => 'sfGuardUser',
                                                                                                      'column' => 'username'), array('invalid' => 'This username already taken.')),
                                                                  new sfValidatorDoctrineUnique(array('model' => 'sfGuardUser',
                                                                                                      'column' => 'email_address'), array('invalid' => 'This email address already taken.'))
                                                                  )));

sfValidatorSchemaCompare

$this->validatorSchema['password'] = new sfValidatorString(array('min_length' => 5, 'max_length' => 15));
$this->validatorSchema['repassword'] = new sfValidatorString(array('required' => true));
$this->validatorSchema->setPostValidator(new sfValidatorSchemaCompare('repassword',  sfValidatorSchemaCompare::EQUAL, 'password'));

PHP Symfony, Comment passer une valeur a un objet sfForm dans le backend d’une application

apps/backend/modules/hosts/actions/actions.class.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class hostsActions extends autoHostsActions
{
 
  public function executeCreate(sfWebRequest $request)
  {
    $this->form = $this->configuration->getForm();
    $this->hosts = $this->form->getObject();
 
    $tainted_values = $request->getParameter($this->form->getName());     
    $tainted_values['user_id'] = $this->getUser()->getGuardUser()->getId();
 
    $request->setParameter($this->form->getName(), $tainted_values);
    parent::processForm($request, $this->form);
    $this->setTemplate('new');
  }
}