organizan patrocinan
colaboran
Jornadas Symfony 5 y 6 de julio 2010Universitat Jaume I, Castellón
http://decharlas.uji.es/symfony
tr
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
hacemos Webs!
Jornadas Symfony 5 y 6 de julio 2010Universitat Jaume I, Castellón
http://decharlas.uji.es/symfony
Domesticando los formularios: sfFormJose Antonio Pio Acilia.es
Jornadas Symfony http://decharlas.uji.es/symfony
PresentaciónCTO Acilia Internet Madrid
Jornadas Symfony http://decharlas.uji.es/symfony
Background
+ Estudie Ingeniería Electrónica
+ Empece a trabajar con internet en el 2001... y aquí sigo.
+ PHP y Ruby
+ CakePHP, Rails, CodeIgniter y Symfony 1.2 - 1.4
Jornadas Symfony http://decharlas.uji.es/symfony
PresentaciónProyectos con Symfony
Jornadas Symfony http://decharlas.uji.es/symfony
Jornadas Symfony http://decharlas.uji.es/symfony
PresentaciónProyectos con Symfony
Jornadas Symfony http://decharlas.uji.es/symfonynotodohoteles.com, quiniela15.com (cache)CondeNast - Profesional Vogue GQ
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Domesticando los formularios: sfFormContenido
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Contenido
+ Formularios el SubFramework
+ Las Clases
+ Formularios
+ Widgets
+ Validators
+ Funcionalidades y clases
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Domestiquemos los Formularios¿Cómo se hace un embedded form?
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
EmbeddedFormAsí se hace
public function configure(){ ... $this->embedForm('newPhotos', new ObjectForm($ObjectRelated) );}
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
EmbeddedFormPara esto lo he usado
class UserAdminForm extends BasesfGuardUserAdminForm{ public function configure() { ... $profileForm = new sfGuardUserProfileForm($this->object->profile); $this->embedForm("profile", $profileForm); }
}
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Symfony Forms SubFrameWork
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Symfony Forms SubFrameWork
+ Objeto Formulario: sfForm
+ Objeto Widget: sfWidget
+ Objeto Validator: sfValidator
sfForm sfWidget sfValidator
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Las ClasessfForm
public function executeContact($request){ $this->form = new sfForm(); $this->form->setWidgets(array( 'name' => new sfWidgetFormInputText(), 'email' => new sfWidgetFormInputText(array('default' => '[email protected]')), 'subject' => new sfWidgetFormChoice(array('choices' => array('Subject A', 'Subject B', 'Subject C'))), 'message' => new sfWidgetFormTextarea(), ));}
sfForm
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Las ClasessfWidget
class ArticleForm extends BaseArticleForm{
public function configure(){$this->widgetSchema['template_id'] = new sfWidgetFormInputHidden();$this->validatorSchema['cover_image_id'] = new
sfValidatorDoctrineChoice( array ('model'=>'Image', 'required'=>false));$this->widgetSchema['document_id'] = new sfWidgetFormDocument();}
}
sfWidget
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Las ClasessfValidator
class ArticleForm extends BaseArticleForm{
public function configure(){$this->validatorSchema['title'] = new
sfValidatorString(array('max_length' => 255))$this->validatorSchema['template_id'] = new
sfValidatorDoctrineChoice( array ('model'=>'Template', 'required'=>false));
$this->validatorSchema['video_id'] = new sfValidatorArticleVideo( array ( 'object' => $this->object ) );
}
}
sfValidator
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
FomulariossfForms
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
FormulariosEjemplo Formulario de Contactopublic function executeContact($request){
$this->form = new sfForm();$this->form->setWidgets(array(
'name' => new sfWidgetFormInputText(), 'message' => new sfWidgetFormTextarea(),));$this->form->setValidators(array(
'name' => new sfValidatorString( array ( 'max_length' => 10 ) ),'message' => new sfValidatorString( array ( 'max_length' =>
20 ))));
$this->form->getWidgetSchema()->setNameFormat('contact[%s]');
// Deal with the requestif ($request->isMethod('post')){
$this->form->bind( $request->getParameter($this->form->getName()) );
if ( $this->form->isValid() ){var_export ( $this->form->getValues() );
}$this->redirect("module/contact");}
}
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
FormulariosEjemplo Formulario de Contactopublic function executeContact($request){
$this->form = new sfForm();$this->form->setWidgets(array(
'name' => new sfWidgetFormInputText(), 'message' => new sfWidgetFormTextarea(),));$this->form->setValidators(array(
'name' => new sfValidatorString( array ( 'max_length' => 10 ) ),'message' => new sfValidatorString( array ( 'max_length' =>
20 ))));
$this->form->getWidgetSchema()->setNameFormat('contact[%s]');
// Deal with the requestif ($request->isMethod('post')){
$this->form->bind( $request->getParameter($this->form->getName()) );
if ( $this->form->isValid() ){var_export ( $this->form->getValues() );
}$this->redirect("module/contact");}
}
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
FormulariosEjemplo Formulario de Contactopublic function executeContact($request){
$this->form = new sfForm();$this->form->setWidgets(array(
'name' => new sfWidgetFormInputText(), 'message' => new sfWidgetFormTextarea(),));$this->form->setValidators(array(
'name' => new sfValidatorString( array ( 'max_length' => 10 ) ),'message' => new sfValidatorString( array ( 'max_length' =>
20 ))));
$this->form->getWidgetSchema()->setNameFormat('contact[%s]');
// Deal with the requestif ($request->isMethod('post')){
$this->form->bind( $request->getParameter($this->form->getName()) );
if ( $this->form->isValid() ){var_export ( $this->form->getValues() );
}$this->redirect("module/contact");}
}
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
FormulariosEjemplo Formulario de Contactopublic function executeContact($request){
$this->form = new sfForm();$this->form->setWidgets(array(
'name' => new sfWidgetFormInputText(), 'message' => new sfWidgetFormTextarea(),));$this->form->setValidators(array(
'name' => new sfValidatorString( array ( 'max_length' => 10 ) ),'message' => new sfValidatorString( array ( 'max_length' =>
20 )))); // Error extra Form Field si no hay validador ->isValid
$this->form->getWidgetSchema()->setNameFormat('contact[%s]');
// Deal with the requestif ($request->isMethod('post')){
$this->form->bind( $request->getParameter($this->form->getName()) );
if ( $this->form->isValid() ){var_export ( $this->form->getValues() );
}$this->redirect("module/contact");}
}
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
FormulariosEjemplo Formulario de Contactopublic function executeContact($request){
$this->form = new sfForm();$this->form->setWidgets(array(
'name' => new sfWidgetFormInputText(), 'message' => new sfWidgetFormTextarea(),));$this->form->setValidators(array(
'name' => new sfValidatorString( array ( 'max_length' => 10 ) ),'message' => new sfValidatorString( array ( 'max_length' =>
20 ))));
$this->form->getWidgetSchema()->setNameFormat('contact[%s]');
// Deal with the requestif ($request->isMethod('post')){
$this->form->bind( $request->getParameter($this->form->getName()) );
if ( $this->form->isValid() ){var_export ( $this->form->getValues() );
}$this->redirect("module/contact");}
}
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
FormulariosEjemplo Formulario de Contactopublic function executeContact($request){
$this->form = new sfForm();$this->form->setWidgets(array(
'name' => new sfWidgetFormInputText(), 'message' => new sfWidgetFormTextarea(),));$this->form->setValidators(array(
'name' => new sfValidatorString( array ( 'max_length' => 10 ) ),'message' => new sfValidatorString( array ( 'max_length' =>
20 ))));
$this->form->getWidgetSchema()->setNameFormat('contact[%s]');
// Deal with the requestif ($request->isMethod('post')){
$this->form->bind( $request->getParameter($this->form->getName()) );
if ( $this->form->isValid() ){var_export ( $this->form->getValues() );
}$this->redirect("module/contact");}
}
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
FormulariosEjemplo Formulario de Contactopublic function executeContact($request){
$this->form = new sfForm();$this->form->setWidgets(array(
'name' => new sfWidgetFormInputText(), 'message' => new sfWidgetFormTextarea(),));$this->form->setValidators(array(
'name' => new sfValidatorString( array ( 'max_length' => 10 ) ),'message' => new sfValidatorString( array ( 'max_length' =>
20 ))));
$this->form->getWidgetSchema()->setNameFormat('contact[%s]');
// Deal with the requestif ($request->isMethod('post')){
$this->form->bind( $request->getParameter($this->form->getName()) );
if ( $this->form->isValid() ){var_export ( $this->form->getValues() );
}$this->redirect("module/contact");}
}
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
FomulariosImprimiendo los Formularios
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
FormulariosVista del Formulario de Contacto
<?php echo $form->renderFormTag('') ?> <table> <?php echo $form ?> <tr> <td colspan="2"> <input type="submit" /> </td> </tr> </table></form>
<?php echo $form->renderFormTag('') ?> <ul> <?php foreach ($form as $field): ?> <li> <?php echo $fiel->renderRow() ?> </li> <?php endforeach; ?> <li> <input type="submit" /d> </li> </ul></form>
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
FormulariosManipulando los campos del formulario
<?php echo $form->renderFormTag('') ?> <ul> <?php foreach ($form as $field): ?> <li> <?php if ( $field->hasError() ): ?> <div class="error"> <?php echo $field->renderError() ?> </div> <?php endif; ?> <?php echo $field->renderLabel() ?> <?php echo $field->render() ?> <?php if ( $field->renderHelp() ): ?> <?php echo $field->renderHelp() ?> <?php endif; ?> </li> <?php endforeach; ?> <li> <input type="submit" /> </li> </ul></form>
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
sfForm
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
sfFormsfForms, Options y Attributes
class sfForm implements ArrayAccess, Iterator, Countable{ protected static $CSRFSecret = false, $CSRFFieldName = '_csrf_token', $toStringException = null;
protected $widgetSchema = null, $validatorSchema = null, $errorSchema = null, $formFieldSchema = null, $formFields = array(), $isBound = false, $taintedValues = array(), $taintedFiles = array(), $values = null, $defaults = array(), $fieldNames = array(), $options = array(), $count = 0, $localCSRFSecret = null, $embeddedForms = array();
public function __construct($defaults = array(), $options = array(), $CSRFSecret = null) { } public function configure(){ } public function setup() { } public function render($attributes = array()) {}
}
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
sfForm
sfFormFieldSchemasfFormField
sfForm
ArrayAccess CountableIterator
Clases Relativas a los Formularios
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
sfFormClases Relativas a los Formularios
sfForm
ArrayAccess CountableIterator
sfFormSymfony BaseForm sfFormObject
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Widgets
sfWidget sfWidgetForm sfWidgetFormInput
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
WidgetssfWidgets, Options y Attributesabstract class sfWidget{ protected $requiredOptions = array(), $attributes = array(), $options = array();
protected static $xhtml = true, $charset = 'UTF-8';
public function __construct($options = array(), $attributes = array()) { $this->configure($options, $attributes);. .. } protected function configure($options = array(), $attributes = array()) { }
abstract public function render($name, $value = null, $attributes = array(), $errors = array());
}
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
WidgetsWidgets en Symfony
sfWidgetFormPropelChoicesfWidgetFormDoctrineChoice
sfWidgetFormsfWidgetFormDateTimesfWidgetFormSelectRadiosfWidgetFormSelectsfWidgetFormFilterInputsfWidgetFormDateRangesfWidgetFormInputHiddensfWidgetFormInputFilesfWidgetFormInputTextsfWidgetFormInputPasswordsfWidgetFormInputFileEditablesfWidgetFormDatesfWidgetFormTimesfWidgetFormSelectCheckboxsfWidgetFormSelectManysfWidgetFormFilterDatesfWidgetFormInputsfWidgetFormSchemaDecoratorsfWidgetFormTextareasfWidgetFormInputCheckboxsfWidgetFormChoiceBase
sfWidgetFormChoice
sfWidgetFormSchemasfWidgetFormSchemaFormatterTablesfWidgetFormSchemaFormatterListsfWidgetFormSchemaForEachsfWidgetFormSchemaFormatter
sfWidgetFormI18nChoiceCountrysfWidgetFormI18nDatesfWidgetFormI18nTimesfWidgetFormI18nDateTimesfWidgetFormI18nChoiceCurrencysfWidgetFormI18nChoiceTimezonesfWidgetFormI18nChoiceLanguage
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
WidgetsWidgets más usados
new sfWidgetFormInput(array('default' => 'John Doe'));new sfWidgetFormTextarea(array('default' => 'Enter your address here'), array('cols' => 20, 'rows' => 5));new sfWidgetFormInputPassword();new sfWidgetFormInputHidden(array('default' => 1234));new sfWidgetFormInputCheckbox(array('value_attribute_value' => 'single', 'default' => true));new sfWidgetFormChoice(array( 'choices' => array('' => 'Select from the list', 'us' => 'USA', 'ca' => 'Canada', 'uk' => 'UK', 'other'), 'default' => 'uk'));new sfWidgetFormDate(array( 'label' => 'Date of birth', 'default' => '01/01/1950', // can be a timestamp or a string understandable by strtotime() 'years' => $years,));
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
WidgetsWidgets más usados
new sfWidgetFormTime(array('default' => '12:00'));new sfWidgetFormDateTime(array('default' => '01/01/2008 12:00'));new sfWidgetFormI18nDate(array( 'culture' => $this->getUser()->getCulture(), 'month_format' => 'name', // Use any of 'name' (default), 'short_name', and 'number' 'label' => 'Date of birth', 'default' => '01/01/1950', 'years' => $years));new sfWidgetFormI18nCountryChoice(array('default' => 'UK'));new sfWidgetFormI18nLanguageChoice(array( 'languages' => array('en', 'fr', 'de'), // optional restricted list of languages 'default' => 'en'));new sfWidgetFormInputFile();new sfWidgetFormInputFileEditable(array('default' => '/images/foo.png'));
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
WidgetsCrear un Widget propio
class sfWidgetFormCKeditor extends sfWidgetFormTextarea{
public function __construct($options = array (), $attributes = array ()) { $this->addOption('ckconfig', array( 'toolbar' => "Full", 'rows' => 10 , 'cols' => 80 ) );$this->addOption('verify', false ); parent::__construct($options, $attributes); } protected function configure($options = array (), $attributes = array ()) { $this->setAttribute('class', "ck_textarea"); } }}
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
WidgetsWidgets más usados
public function render($name, $value = null, $attributes = array (), $errors = array ()){$config = "";$editor = $this->renderContentTag('textarea', self::escapeOnce($value), array_merge( array ('name'=>$name), $attributes));$id_name = trim(preg_replace("/_{2,}/", "_", preg_replace("/_{1,}$/", "", preg_replace("/\[|\]/", "_", $name))));$configout = array ();foreach($this->getOption('ckconfig') as $key => $value){$configout[] .= " {$key} : \"{$value}\" ";}$config = ", { ".join(",", $configout)." }";$editor .= '<script type="text/javascript">$(document).ready(function(){try{var instance = CKEDITOR.instances[\''.$id_name.'\'];if ( instance ){instance.destroy(true); instance = null; CKEDITOR.replace( \''.$name.'\' '.$config.'); }else{ CKEDITOR.replace( \''.$name.'\' '.$config.' ); }}catch(e){}});
</script>'; return $editor; } }
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
WidgetssfWidgetabstract class sfWidget{
public function renderTag($tag, $attributes = array()) { if (empty($tag)) { return ''; }
return sprintf('<%s%s%s', $tag, $this->attributesToHtml($attributes), self::$xhtml ? ' />' : (strtolower($tag) == 'input' ? '>' : sprintf('></%s>', $tag))); } public function renderContentTag($tag, $content = null, $attributes = array()) { if (empty($tag)) { return ''; } return sprintf('<%s%s>%s</%s>', $tag, $this->attributesToHtml($attributes), $content, $tag); }
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Validators
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorssfValidatorBase, Options y Attributes
abstract class sfValidatorBase{
protected static $charset = 'UTF-8',$globalDefaultMessages = array('invalid' => 'Invalid.', 'required'
=> 'Required.');
protected$requiredOptions = array(), $defaultMessages = array(),$defaultOptions = array(), $messages = array(),$options = array();
public function __construct($options = array(), $messages = array()){{
$this->configure($options, $messages);...
}protected function configure($options = array(), $messages =
array()) {}
abstract protected function doClean($value);
}
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsValidadores de Symfony
sfValidatorBasesfValidatedFilesfValidatorBooleansfValidatorChoicesfValidatorCSRFTokensfValidatorDatesfValidatorDateRangesfValidatorDateTimesfValidatorEmailsfValidatorFilesfValidatorIntegersfValidatorNumbersfValidatorPasssfValidatorRegexsfValidatorStringsfValidatorTimesfValidatorUrlsfValidatorFromDescription
sfValidatorAndsfValidatorOrsfValidatorCallback
sfValidatorSchemasfValidatorSchemaComparesfValidatorSchemaFiltersfValidatorSchemaForEachsfValidatorErrorsfValidatorErrorSchemasfValidatorDecorator
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsValidadores mas usados
new sfValidatorString(array( 'min_length' => 4, 'max_length' => 50,),array( 'min_length' => 'Es muy corto', 'max_length' => 'Es muy largo',));
new sfValidatorNumber(array( 'min' => 18, 'max' => 99.99,),array( 'min' => 'Mas de 18', 'max' => 'No te creo',));new sfValidatorEmail();new sfValidatorUrl();new sfValidatorRegex(array( 'pattern' => '^[0-9]{3}\.[0-9]{3}\.[0-9]{2}\.[0-9]{3}$' ));new sfValidatorBoolean();
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsValidadores mas usados
new sfValidatorChoice(array('choices' => array('Subject A', 'Subject B', 'Subject C')));new sfValidatorChoice(array('multiple' => true, 'choices' => array('en' => 'English', 'fr' => 'French', 'other')));new sfValidatorPropelChoice(array('model' => 'Section','column' => 'name'));new sfValidatorDoctrineChoice(array('model' => 'Section','column' => 'name'));
new sfValidatorPropelUnique(array('model' => 'User', 'column' => 'login'));new sfValidatorDoctrineUnique(array('model' => 'User', 'column' => 'login'));new sfValidatorFile( array ('required'=>true, 'path'=>"///folder", 'mime_types'=>'web_images', 'max_size'=>10485760 ) );
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsInicio de la Validación
// Validación en la acciónif ($request->isMethod('post')){
$this->form->bind( $request->getParameter($this->form->getName()) );
if ( $this->form->isValid() ){var_export ( $this->form->getValues() );
}}
public function bindAndSave($taintedValues, $taintedFiles = null, $con = null) { $this->bind($taintedValues, $taintedFiles); if ($this->isValid()){ { $this->save($con); return true; } return false; }
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsMas sobre el proceso de Validación
$form->bind( $values, $fliles );sfForm::doBind($values);
$this->$this->validatorSchema->clean($values)sfValidatorSchema::clean($values);
$this->doClean($values);$this->preClean($values);foreach ($values as $name => $value)
$clean[$name] = $this->fields[$name]->clean($value);
$clean = $this->postClean($clean);return $clean;
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsMas sobre el proceso de Validación
$form->bind( $values, $fliles );sfForm::doBind($values);
$this->$this->validatorSchema->clean($values)sfValidatorSchema::clean($values);
$this->doClean($values);$this->preClean($values);foreach ($values as $name => $value)
$clean[$name] = $this->fields[$name]->clean($value);
$clean = $this->postClean($clean);return $clean;
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsMas sobre el proceso de Validación
$this->form->bind( $request->getParameter($this->form->getName()) );
public function bind(array $taintedValues = null, array $taintedFiles = null){ ... try { $this->doBind(self::deepArrayUnion($this->taintedValues, self::convertFileInformation($this->taintedFiles))); ... }... } protected function doBind(array $values){ $this->values = $this->validatorSchema->clean($values); }
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsMas sobre el proceso de Validación
$form->bind( $values, $fliles );sfForm::doBind($values);
$this->$this->validatorSchema->clean($values)sfValidatorSchema::clean($values);
$this->doClean($values);$this->preClean($values);foreach ($values as $name => $value)
$clean[$name] = $this->fields[$name]->clean($value);
$clean = $this->postClean($clean);return $clean;
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsMas sobre el proceso de Validación
$form->bind( $values, $fliles );sfForm::doBind($values);
$this->$this->validatorSchema->clean($values)sfValidatorSchema::clean($values);
$this->doClean($values);$this->preClean($values);foreach ($values as $name => $value)
$clean[$name] = $this->fields[$name]->clean($value);
$clean = $this->postClean($clean);return $clean;
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsMas sobre el proceso de Validación
$form->bind( $values, $fliles );sfForm::doBind($values);
$this->$this->validatorSchema->clean($values)sfValidatorSchema::clean($values);
$this->doClean($values);$this->preClean($values);foreach ($values as $name => $value)
$clean[$name] = $this->fields[$name]->clean($value);
$clean = $this->postClean($clean);return $clean;
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsMas sobre el proceso de Validación
$form->bind( $values, $fliles );sfForm::doBind($values);
$this->$this->validatorSchema->clean($values)sfValidatorSchema::clean($values);
$this->doClean($values);$this->preClean($values);foreach ($values as $name => $value)
$clean[$name] = $this->fields[$name]->clean($value);
$clean = $this->postClean($clean);return $clean;
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsProceso de Validación
protected function doClean($values){ // pre validator try{ $this->preClean($values); }catch ... // validate given values foreach ($values as $name => $value) { try{ $clean[$name] = $this->fields[$name]->clean($value); }catch (sfValidatorError $e){ $clean[$name] = null; $errorSchema->addError($e, (string) $name); } }.... // post validator try{ $clean = $this->postClean($clean); }catch ... return $clean; }
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsMas sobre el proceso de Validación
$form->bind( $values, $fliles );sfForm::doBind($values);
$this->$this->validatorSchema->clean($values)sfValidatorSchema::clean($values);
$this->doClean($values);$this->preClean($values);foreach ($values as $name => $value)
$clean[$name] = $this->fields[$name]->clean($value);
$clean = $this->postClean($clean);return $clean;
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsMas sobre el proceso de Validación
$form->bind( $values, $fliles );sfForm::doBind($values);
$this->$this->validatorSchema->clean($values)sfValidatorSchema::clean($values);
$this->doClean($values);$this->preClean($values);foreach ($values as $name => $value)
$clean[$name] = $this->fields[$name]->clean($value);
$clean = $this->postClean($clean);return $clean;
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsMas sobre el proceso de Validación
$form->bind( $values, $fliles );sfForm::doBind($values);
$this->$this->validatorSchema->clean($values)sfValidatorSchema::clean($values);
$this->doClean($values);$this->preClean($values);foreach ($values as $name => $value)
$clean[$name] = $this->fields[$name]->clean($value);
$clean = $this->postClean($clean);return $clean;
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsMas sobre el proceso de Validación
$form->bind( $values, $fliles );sfForm::doBind($values);
$this->$this->validatorSchema->clean($values)sfValidatorSchema::clean($values);
$this->doClean($values);$this->preClean($values);foreach ($values as $name => $value)
$clean[$name] = $this->fields[$name]->clean($value);
$clean = $this->postClean($clean);return $clean;
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
ValidatorsMas sobre el proceso de Validación
$this->form->bind( $request->getParameter($this->form->getName()) );
public function bind(array $taintedValues = null, array $taintedFiles = null){ ... try { $this->doBind(self::deepArrayUnion($this->taintedValues, self::convertFileInformation($this->taintedFiles))); ... }... } protected function doBind(array $values){ $this->values = $this->validatorSchema->clean($values); }
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Funcionalidades y Clases
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Guardando los Formularios de ObjetosSave y doSave
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Image: actAs: Timestampable: ~ columns: name: { type: string(255), notblank: true, notnull: true } file_name: { type: string(255), notblank: true, notnull: true } description: { type: blob } width: { type: integer } height: { type: integer } size: { type: integer } mime_type: { type:string(255) } alt: { type: blob, notnull: true, notblank:true } title: { type: blob, notnull: true, notblank:true } caption: { type: string(255) } copy_right: { type: string(255) } longdesc: { type: blob } gravity: { type:string , default: north }
Guardando los Formularios de Objetos
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Invocando el método save()
Guardando los Formularios de Objetos
ᄎ
class imageActions extends autoImageActions{
public function executeCreate(sfWebRequest $request){$this->form = new ImageForm();$this->image = $this->form->getObject();if ($this->processForm($request, $this->form)){
$this->redirect(“edit...”);} else {
$this->execute("new");}
}...protected function processForm(sfWebRequest $request, sfForm $form){
$form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
Try{ $tree = $form->save(); }}catch(Exception $e) { return false; }
return true;
}...
}
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Guardando los Formularios de ObjetosSave y doSave
sfFormObject::save();
sfFormObject::doSave();
sfFormsObject::updateObject();
sfFormDoctrine::processValues($values);
sfFormObject::updateXXXColumn ($value);
sfFormDoctrine::processUploadedFile();
sfFormDoctrine::doUpdateObject();
sfFormObject::updateObjectEmbeddedForms($values);
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Save y doSave
sfFormObject::save();
sfFormObject::doSave();
sfFormsObject::updateObject();
sfFormDoctrine::processValues($values);
sfFormObject::updateXXXColumn ($value);
sfFormDoctrine::processUploadedFile();
sfFormDoctrine::doUpdateObject();
sfFormObject::updateObjectEmbeddedForms($values);
Guardando los Formularios de Objetos
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Save y doSave
sfFormObject::save();
sfFormObject::doSave();
sfFormsObject::updateObject();
sfFormDoctrine::processValues($values);
sfFormObject::updateXXXColumn ($value);
sfFormDoctrine::processUploadedFile();
sfFormDoctrine::doUpdateObject();
sfFormObject::updateObjectEmbeddedForms($values);
Guardando los Formularios de Objetos
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Save y doSave
sfFormObject::save();
sfFormObject::doSave();
sfFormsObject::updateObject();
sfFormDoctrine::processValues($values);
sfFormObject::updateXXXColumn ($value);
sfFormDoctrine::processUploadedFile();
sfFormDoctrine::doUpdateObject();
sfFormObject::updateObjectEmbeddedForms($values);
Guardando los Formularios de Objetos
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Save y doSave
sfFormObject::save();
sfFormObject::doSave();
sfFormsObject::updateObject();
sfFormDoctrine::processValues($values);
sfFormObject::updateXXXColumn ($value);
sfFormDoctrine::processUploadedFile();
sfFormDoctrine::doUpdateObject();
sfFormObject::updateObjectEmbeddedForms($values);
Guardando los Formularios de Objetos
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Save y doSave
sfFormObject::save();
sfFormObject::doSave();
sfFormsObject::updateObject();
sfFormDoctrine::processValues($values);
sfFormObject::updateXXXColumn ($value);
sfFormDoctrine::processUploadedFile();
sfFormDoctrine::doUpdateObject();
sfFormObject::updateObjectEmbeddedForms($values);
Guardando los Formularios de Objetos
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
sfForm updateXXXColumn
class ImageForm extends BaseImageForm{
...protected function updateGravityColumn ($field){$valids = array ('north', 'center', 'south');if ( in_array ( $field, $valids ) ){
return $field;}return 'north';}
protected function updateDescriptionColumn($field){$this->object->longdesc = $field;return $field;}...
}
Guardando los Formularios de Objetos
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Save y doSave
sfFormObject::save();
sfFormObject::doSave();
sfFormsObject::updateObject();
sfFormDoctrine::processValues($values);
sfFormObject::updateXXXColumn ($value);
sfFormDoctrine::processUploadedFile();
sfFormDoctrine::doUpdateObject();
sfFormObject::updateObjectEmbeddedForms($values);
Guardando los Formularios de Objetos
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Save y doSave
sfFormObject::save();
sfFormObject::doSave();
sfFormsObject::updateObject();
sfFormDoctrine::processValues($values);
sfFormObject::updateXXXColumn ($value);
sfFormDoctrine::processUploadedFile();
sfFormDoctrine::doUpdateObject();
sfFormObject::updateObjectEmbeddedForms($values);
Guardando los Formularios de Objetos
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Save y doSave
sfFormObject::save();
sfFormObject::doSave();
sfFormsObject::updateObject();
sfFormDoctrine::processValues($values);
sfFormObject::updateXXXColumn ($value);
sfFormDoctrine::processUploadedFile();
sfFormDoctrine::doUpdateObject();
sfFormObject::updateObjectEmbeddedForms($values);
Guardando los Formularios de Objetos
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Formularios de ObjetosLas Clases
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Formularios de Objetos
sfForm
Las Clases
ArticleFormBaseArticleFormBaseFormDoctrine
sfFormDoctrinesfFormObjectBaseFormsfFormSymfony
ArrayAccess CountableIterator
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Filtros del Admin GeneratorLas Clases
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Formularios de Objetos
sfForm
Las Clases
ArticleFormBaseArticleFormFilterBaseFormFilterDoctrine
sfFormFilterDoctrinesfFormFilterBaseFormsfFormSymfony
ArrayAccess CountableIterator
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Comparación de ClasesLas Clases
ArticleFormFilterBaseArticleFormFilterBaseFormFilterDoctrine
sfFormFilterDoctrinesfFormFilterBaseForm
ArticleFormBaseArticleFormBaseFormDoctrine
sfFormDoctrinesfFormObjectBaseForm
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Muchas GraciasCTO José Antonio Pio Gil
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
http://twitter.com/josetonyp