Créer un compte ou loggez-vous pour pouvoir ajouter, commenter et noter les snippets.

Navigation

Tags relatifs

my Symfony Plugins

Plugins demos


My bookmarks

Vous pouvez commenter/noter en utilisant le compte anonymous (mot de passe: anonymous)
You can comment/rate using the anonymous account (password: anonymous).

Snippets taggés : "form" Snippets taggés : "form"

[Symfony 1.2] Form white list function - 771 view(s)

Allow to remove all fields of a form except a given list:

public function unsetAllExcept($fields = array())
{
  foreach($this->getObject()->toArray(BasePeer::TYPE_FIELDNAME) as $key => $val)
  {
    $tmp[] = strtolower($key);
  }
 
  $tmp = array_diff($tmp, $fields);
 
  foreach($tmp as $value)
  {
    unset($this[$value]);
  }
}

Remove created_at, updated_at ...

$this->unsetAllExcept(array('comment'));
par COil le 2009-08-13, taggé : form  security  symfony 
(1 commentaire)

[Symfony 1.2] Autoriser l'envoi de champs additionnels à un formulaire - 1501 view(s)

public function allowExtraFields()
{
  $this->validatorSchema->setOption('allow_extra_fields', true);
}
par COil le 2009-08-13, taggé : form  symfony 
(1 commentaire)

[Symfony 1.2] Récupérer la liste des champs du modèle associés à un formulaire - 611 view(s)

public function getFields()
{
  return array_keys($this->widgetSchema->getFields());
}
par COil le 2009-04-01, taggé : fields  form  model  symfony  widget 
(1 commentaire)

[jQuery] Contrôle de champs radio-box et checkbox - 6621 view(s)

1er cas:

Ici on est dans un cas ou:

- On a 2 radio-box par ligne (et seulement 2)
- Au moins l'une des 2 radio-box doit être sélectionnée
- Si erreur on met le focus sur la 1ère radio du champ
- Si erreur on affiche un message d'erreur à partir du texte d'un div caché

function control_questionnaire()
{  
  checked = false;
 
  jQuery(":radio:even", form).each
  (
    function(intIndex)
    { 
      radio = jQuery(this);
      checked = jQuery(":radio[@name='" + radio.attr('name') + "']:checked", form).size();
 
      if (checked == false)
      {
        radio.focus();
        showFocus(jQuery("#anim_" + radio.attr('id')));
        alert(jQuery("#control_" + radio.attr('id')).html());
 
        return false;
      } 
    }   
  );
 
  if (checked)
  {
    jQuery('#loading-indicator').show();
    jQuery('#diag-form').submit();
  }
}

2ème cas:

Cette fois ci on est dans un cas ou:

- On a un nombre de questions quelconque
- On a un nombre de réponses quelconque, chaque réponse étant représentée par une checkbox
- On peut cocher plusieurs réponses par question
- Au moins l'une des checkbox doit être sélectionnée
- Si erreur on met le focus sur la 1ère checkbox du champ
- Si erreur on affiche un message d'erreur à partir du texte d'un div caché

function control_questionnaire_complexe()
{  
  checked = false;
  name = '';
 
  jQuery(":checkbox", form).each
  (
    function(intIndex)
    { 
      checkbox = jQuery(this);
 
      // Controle si seulement on a pas deja controle le groupe de checkbox
      if (name != checkbox.attr('name'))
      {  
          checked = jQuery(":checkbox[@name='" + checkbox.attr('name') + "']:checked", form).size();
 
          if (checked == false)
          {
            checkbox.focus();
            answer_id = checkbox.attr('id').split('_');
            showFocus(jQuery("#anim_" + answer_id[0]));
            alert(jQuery("#control_" + answer_id[0]).html());
 
            return false;
          }
 
          name = checkbox.attr('name');
      }
    }   
  );
 
  if (checked)
  {
    jQuery('#loading-indicator').show();
    jQuery('#diag-form').submit();
  }
}
par COil le 2009-01-09, taggé : form  javascript  jquery  radio  test 
(1 commentaire)

[symfony 1.1 /1.2] Fonction updateObject typique pour un formulaire imbriqué - 499 view(s)

Tiré de l'article http://www.miximum.fr/methodes-et-outils/104-mixons-des-formulaires-avec-symfony

public function updateObject()
{
  parent::updateObject();
 
  $address = $this->getObject()->getAddress();
  $values = $this->getValues();
 
  $address->fromArray($values['address'], BasePeer::TYPE_FIELDNAME);
  $address->save();
 
  return $this->object;
}
par COil le 2008-11-04, taggé : embed  form  object  symfony 
(1 commentaire)

[symfony 1.1] Classe de formulaire typique - 687 view(s)

<?php
 
/**
 * Form to add a classified ad.
 * 
 * @author loic.vernet
 * @since  7 august 08
 *
 * @package    form
 */
 
class qbNewThreadForm extends qbThreadForm 
{
  // Default mask to create fields names
  public static $main_fields_name = 'qb_thread';
 
  // Default labels
  protected $labels = array(
 
    // Thread
    'title'         => 'Sujet',
    'category_id'   => 'Forum',
 
    // Contact form
    'qb_post'       => 'Post',
  );
 
  // Default fields to keep
  protected $fields_to_keep = array(
 
    // Thread
    'id',
    'category_id',
 
    // Post
    'qb_post',
  );
 
  // Liste of field that can't be modified by direct input values
  protected static $protected_fields = array(
  );
 
  /**
   * Configuration of form.
   */
  public function configure()
  {
    // Build widgets
    $this->setWidgetOptions();
 
    // Set wdigets
    $this->processWidgets();
 
    // Set validators    
    $this->processValidators();
 
    // Embed other forms
    $this->embedForms();
  }
 
  /**
   * Set generic options for widgets.
   * 
   * @author loic.vernet
   * @since
   */
  protected function setWidgetOptions()
  {
    // name format
    $this->widgetSchema->setNameFormat(self::$main_fields_name. '[%s]');
 
    // Set labels    
    $this->setLabels($this->labels);
 
    // Allow extra fields for all forms
    $this->allowExtraFields();
  }
 
  /**
   * set all widgets.
   * 
   * @author loic.vernet
   * @since
   */
  public function processWidgets()
  {
    $this->removeAllFieldsExcept($this->fields_to_keep);
 
    $this->widgetSchema['category_id'] = new sfWidgetFormPropelSelect(
      array(
        'model'     => 'qbCategory', 
        'add_empty' => false,
        //'criteria'  => ipAdBasePeer::getCategoriesCriteria()
    ));
 
    $this->widgetSchema['title'] = new sfWidgetFormInput();
  }  
 
  /**
   * Set all validators.
   * 
   * @author loic.vernet
   * @since 
   */
  public function processValidators()
  {
    $this->validatorSchema['category_id'] = new sfValidatorString(
        array('required' => true),
        array('required' => 'Veuillez choisir un forum')
    );
 
    $this->validatorSchema['title'] = new sfValidatorString(
        array('required' => true),
        array('required' => 'Veuillez choisir un titre pour le sujet')
    );
  }
 
  /**
   * Embed other forms to the current form.
   * 
   * @author loic.vernet 
   * @since 
   */
  protected function embedForms()
  {
  }
}
par COil le 2008-09-29, taggé : class  field  form  labels  symfony  validator  widget 
(1 commentaire)

[symfony 1.1] Template de formulaire typique - 385 view(s)

[Edit 20081017: Ajout affichage des erreurs globales]

<?php /*@var $form qbNewThreadForm */ ?>
 
<?php qb_forum_add_style(); echo qb_include_resources(); ?>
 
<h1><?php echo $forum->getTitle(); ?></h1>
<h2>Création d'une nouvelle discussion</h2>
 
<?php include_partial('forum/breadcrumb', array('forum_root' => $forum)); ?>
 
<?php if ($form->hasGlobalErrors()): ?>
  <?php echo $form->renderGlobalErrors(); ?>
<?php endif; ?>
 
<div class="thread-edit">
 
  <div id="thread-edit-bb-tools" class="cadre">
    Outils de mise en page
  </div>
 
  <div id="thread-edit-title" class="cadre">
    <?php echo $form['title']->renderLabel(); ?>
    <?php echo $form['title']->renderError(); ?>
    <?php echo $form['title']->render(); ?>
  </div>
 
  <div id="thread-edit-forum" class="cadre">
    <?php echo $form['category_id']->renderLabel(); ?>
    <?php echo $form['category_id']->renderError(); ?>
    <?php echo $form['category_id']->render(); ?>
  </div>
 
  <div id="thread-edit-bb-code" class="cadre">
  </div>
 
  <div id="thread-edit-files" class="cadre">
    Fichiers joints
  </div>
 
  <div id="thread-edit-options" class="cadre">
    Options
  </div>
 
  <div id="thread-edit-tone" class="cadre">
    Ton du message
  </div>
 
</div>
 
<?php // echo $form; ?>
par COil le 2008-09-29, taggé : form  symfony  template  view  widget 
(1 commentaire)

[symfony 1.1] Gestion de formulaire typique - 281 view(s)

  /**
   * Ad publication form for the users.
   * 
   * @todo : Eventually save posted datas in session to be able to retrieve
   * values even when changer the main category of the ad. 
   */
  public function executePost($request)
  {
    // Default ad_base object
    $ad_base = $this->getAdBaseOrCreate($request);
 
    // Secure edition
    if (!$ad_base->isNew())
    {
      $this->forward404Unless($ad_base && ($ad_base->getIpAdContact()->getCreatedBy() == $this->getUser()->getId()));
    }
 
    // Form and params
    $ip_ad_base_post = $request->getParameter('ip_ad_base');
    $form = new ipAdPostForm($ad_base, $ip_ad_base_post);    
    $category_refresh = isset($ip_ad_base_post['category_refresh']) ? $ip_ad_base_post['category_refresh'] : 0;
 
    // Refresh category and save submitted form values (without input validation)
    if ($category_refresh)
    {
      $ip_ad_base_post['category_refresh'] = 0;
      $form->setDefaults($ip_ad_base_post);
    }
 
    // Post and save form
    if (!$category_refresh && $this->isPost() && $ip_ad_base_post)
    {
      $form->bind($ip_ad_base_post, $request->getFiles('ip_ad_base'));
 
      if ($form->isValid())
      {
        $form->save();
 
        // Photo deletion
        if ($delete_flag = $form->hasDeletePhotoFlag() && !$ad_base->isNew())
        {
          $ad_base->deletePhoto();
        }
 
        // Photo upload
        if (!$delete_flag && $form->hasPhoto())
        {
          $form->saveAndUploadPhoto($request);
        }
 
        // Send email to administrator if it is a new ad to validate
        //if ($form->getObject()->isNew())
        //{
          //ipTools::dump('send email', 'send email', 1);
          $form->getObject()->notifyWebmasterForNewAd();
        //}
 
        // Redirect
        $this->getUser()->addNotice('Votre annonce a été sauvegardée, elle sera visible dès qu\'elle aura été validée par un administrateur');
        $this->redirect('iposte_user/adsList');
      }
    }
 
    // Pass form to template
    $this->form = $form;
  }
 
par COil le 2008-09-29, taggé : action  form  post  symfony 
(1 commentaire)

[symfony 1.1 / 1.2] : Validation OR sur 2 champs différents - 813 view(s)

    // Check category or query
    $v = new sfValidatorCallback(array(
      'callback' => array($this, 'checkCategoryOrQuery')
    ,) ,
    array(
      'invalid'  => 'Veuillez choisir une rubrique ou un mot clé'
    ));
 
    $this->validatorSchema->setPostValidator($v);

et le callback qui va bien:

  /**
   * Check if a category or a keyword has been set.
   *
   * @param sfValidator $validator
   * @param Array $value Form values
   * @param Array $arguments  Validation arguments
   * 
   * @return mixed
   */
  public function checkCategoryOrQuery($validator, $value, $arguments)
  {
    if (empty($value['category_id']) && empty($value['nature_id']))
    {
      throw new sfValidatorError($validator, 'invalid');
    }
 
    return $value;
  }
par COil le 2008-09-29, taggé : callback  form  symfony  validation  validator 
(3 commentaires)

[symfony 1.0] Récupérer la valeur brute d'un champ échappé dans un template - 191 view(s)

$form_ajax_options = $sf_data->get('form_ajax_options', ESC_RAW);
par COil le 2008-09-29, taggé : escaping  field  form  security  symfony  template  value 
(1 commentaire)

[symfony 1.0] Fichier de validation typique - 352 view(s)

methods:
  post:
    - "user_profile{login}"
    - "user_profile{password}"
    - "user_profile{check_password}"
    - "user_profile{email}"
    - "user_profile{civility}"
    - "user_profile{first_name}"
    - "user_profile{last_name}"
    - "user_profile{birth_date}"
    - "user_profile{address}"
    - "user_profile{postal_code}"
    - "user_profile{town}"
    - "captcha"
    - "user_profile{is_newsletter_subscribed}"
    - "user_profile{is_partners_subscribed}"
    - "user_profile{photo}"
    - "user_profile{personal_url}"
 
fillin:
  enabled: true
  param:
    name: form_register_member
 
names:
  user_profile{login}:
    required:      Yes
    required_msg:  le login est obligatoire
    validators:    [usernameValidator, loginValidator]
 
  user_profile{password}:
    required:      Yes
    required_msg:  le mot de passe est requis
    validators:    passwordValidator
 
  user_profile{check_password}:
    required:     Yes
    required_msg: La confirmation du mot de passe est obligatoire 
    validators:   passwordValidator
 
  user_profile{email}:
    required:      Yes
    required_msg:  l'email est obligatoire
    validators:    [emailValidator, mailuniqValidator]
 
  user_profile{civility}:
    required:      Yes
    required_msg:  veuillez choisir votre civilité
 
  user_profile{first_name}:
    required:      Yes
    required_msg:  le prénom est obligatoire
    validators:    usernameValidator
 
  user_profile{last_name}:
    required:      Yes
    required_msg:  le nom est obligatoire
    validators:    usernameValidator
 
  user_profile{birth_date}:
    required:      Yes
    required_msg:  le nom est obligatoire
    validators:    usernameValidator     
 
  user_profile{address}:
    required:     Yes
    required_msg: l'adresse est obligatoire
 
  user_profile{postal_code}:
    required:      Yes
    required_msg:  le code postal est obligatoire
    validators:    zipcodeValidator

  user_profile{town}:
    required:     Yes
    required_msg: la ville est obligatoire
 
  captcha:
    required:      Yes
    required_msg:  vous devez recopier le code
    validators:    captchaValidator
 
  user_profile{is_newsletter_subscribed}:
    required:     no
 
  user_profile{is_partners_subscribed}:
    required:     no
 
  user_profile{photo}:
    required:     no
 
  user_profile{personal_url}:
    required:     no
 
passwordValidator:
  class:          sfCompareValidator
  param:
    check:          passconf
    compare_error:  les mots de passe ne correspondent pas
 
loginValidator:
  class:            sfPropelUniqueValidator
  param:
    class:          sfGuardUser
    column:         username
    unique_error:   ce login est déjà enregistré, choisissez en un autre.
 
mailuniqValidator:
  class:            sfPropelUniqueValidator
  param:
    class:          UserProfile
    column:         email
    unique_error:   cet email est déjà enregistré, choisissez en un autre.

zipcodeValidator:
  class:            sfNumberValidator
  nan_error:        Veuillez n'entrer que des chiffres
  min:              5
  min_error:        le code postal est au minimum composé de 5 chiffres
 
usernameValidator:      
  class: sfStringValidator
  param:
    min: 3
    min_error: ce login doit être plus long
 
emailValidator:
  class:         sfEmailValidator
  param:
    email_error: l'adresse email n'est pas valide
 
captchaValidator:
  class:         captchaValidator
  param:
    error:       vous devez recopier correctement le code de validation
 
 
 
 
 
methods:         [post]     # This is the default setting
 
fillin:
  enabled:       true
  param:         
    name:        send_page_to_friend_form
    #skip_fields:   [email]  # Do not repopulate these fields
    #exclude_types: [hidden, password] # Do not repopulate these field types
    #check_types:   [text, checkbox, radio, password, hidden] # Do repopulate these
 
validators:
  myStringValidator:
    class: sfStringValidator
    param:
      min:       2
      min_error: This field is too short (2 characters minimum)
      max:       100
      max_error: This field is too long (100 characters maximum)
 
fields:
  name:
    required:
      msg:       The name field cannot be left blank
    myStringValidator:
  email:
    required:
      msg:       The email field cannot be left blank
    myStringValidator:
    sfEmailValidator:
      email_error:  This email address is invalid
  age:
    sfNumberValidator
      nan_error:    Please enter an integer
      min:          0
      min_error:    "You're not even born. How do you want to send a message?"
      max:          120
      max_error:    "Hey, grandma, aren't you too old to surf on the Internet?"
  message:
    required:
      msg:          The message field cannot be left blank
par COil le 2008-09-29, taggé : config  form  symfony  validation  validator 
(1 commentaire)

[symfony 1.0] Validation manuelle d'extension de fichier uploadé - 335 view(s)

Pour eviter les problemes de type MIME, notemment sous MAC.

    /**
     * Fonction de validation manuelle de l'importation
     * 
     * @internal Pour bug Mac type mime
     * 
     * @author Vernet Loic
     * @since  6 mars 2007
     */
     public function validateImport()
     {
        $fieldName = 'importfile';
        $fileName = $this->getRequest()->getFileName($fieldName);
        $validExts = array('.CSV');
 
        if ($this->getRequest()->getMethod() == sfRequest::POST) {
            if ($fileName) {
                foreach($validExts as $validExt) {
                    if (strpos(strtoupper($fileName), $validExt)) {
                        return true;
                    }
                }
                $this->getRequest()->setError($fieldName , 'Extension invalide, l\'extension doît être .csv');                
                return false;
            } else {
                $this->getRequest()->setError($fieldName , 'Fichier invalide');                
                return false;
            }
        }        
        return true;
     }
 
par COil le 2008-09-28, taggé : excel  file  form  post  symfony  upload  validation 
(1 commentaire)

[symfony] Récupérer tout les paramêtres d'une requête HTTP - 109 view(s)

$request = $this->getRequest()->getParameterHolder();
 
par COil le 2008-09-28, taggé : form  parameters  request  symfony 

[symfony 1.0] Boucle sur les erreurs de validation - 111 view(s)

<?php 
if ($sf_request->hasErrors()) { 
    foreach($sf_request->getErrors() as $key => $error) {
        echo '<li>'. $key. ' => '. $error. '</li>';
    }    
}
?>
 

Version synthaxe alternative

<?php if ($sf_request->hasErrors()): ?> 
    <ul>
    <?php foreach($sf_request->getErrors() as $key => $error): ?> 
        <li><?php echo $key; ?> => <?php echo $error; ?></li>
    <?php endforeach; ?>
    </ul>    
<?php endif; ?>
 
par COil le 2008-09-28, taggé : error  form  symfony  validation 

[symfony 1.0] Test si un formulaire a été posté - 135 view(s)

if ($this->getRequest()->getMethod() == sfRequest::POST) {
    // $this->actionWhenPosted()
}
 
par COil le 2008-09-28, taggé : action  form  post  symfony 
Debug toolbar