symfony1 - Outputting required field indicator for symfony forms -


i have few forms configured in symfony. 1 things need have asterisk (*) or other indicator next fields required. fields set required int form framework, , return "this field required" error when form submitted, want indicator before form submitted.

if there way without overriding labels each field manually?

here's automatic solution found in kris wallsmith's blog:

lib/formatter/requiredlabelsformattertable.class.php, add 'required' class labels of required fields

<?php  class requiredlabelsformattertable extends sfwidgetformschemaformattertable {   protected     $requiredlabelclass = 'required';    public function generatelabel($name, $attributes = array())   {     // loop find "required_fields" option     $widget = $this->widgetschema;     {       $requiredfields = (array) $widget->getoption('required_fields');     } while ($widget = $widget->getparent());      // add class (non-destructively) if field required     if (in_array($this->widgetschema->generatename($name), $requiredfields)) {       $attributes['class'] = isset($attributes['class']) ?         $attributes['class'].' '.$this->requiredlabelclass :         $this->requiredlabelclass;     }      return parent::generatelabel($name, $attributes);   } } 

lib/form/baseform.class.php, common base class forms in project:

  protected function getrequiredfields(sfvalidatorschema $validatorschema = null, $format = null)   {     if (is_null($validatorschema)) {       $validatorschema = $this->validatorschema;     }      if (is_null($format)) {       $format = $this->widgetschema->getnameformat();     }      $fields = array();      foreach ($validatorschema->getfields() $name => $validator) {       $field = sprintf($format, $name);       if ($validator instanceof sfvalidatorschema) {         // recur         $fields = array_merge(           $fields,           $this->getrequiredfields($validator, $field.'[%s]')         );       } else if ($validator->getoption('required')) {         // field required         $fields[] = $field;       }     }      return $fields;   }   

add following few lines baseform well, in __construct() method:

$this->widgetschema->addoption("required_fields", $this->getrequiredfields()); $this->widgetschema->addformformatter('table',   new requiredlabelsformattertable($this->widgetschema) );    

after this, labels have required class, use whatever css need mark user.


Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

visual c++ - Using relative values in array sorting ( asm ) -