Transcript of Symfony: Domesticando los formularios
- 1. Castelln - 5 y 6 de Julio 2010 Universitat Jaume I organizan
patrocinan colaboran Jornadas Symfony 5 y 6 de julio 2010
Universitat Jaume I, Castelln http://decharlas.uji.es/symfony
- 2. tr Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony hacemos Webs!
- 3. Jornadas Symfony 5 y 6 de julio 2010 Universitat Jaume I,
Castelln http://decharlas.uji.es/symfony Domesticando los
formularios: sfForm Jose Antonio Pio Acilia.es
- 4. Jornadas Symfony http://decharlas.uji.es/symfony Presentacin
CTO Acilia Internet Madrid Jornadas Symfony
http://decharlas.uji.es/symfony Background + Estudie Ingeniera
Electrnica + Empece a trabajar con internet en el 2001... y aqu
sigo. + PHP y Ruby + CakePHP, Rails, CodeIgniter y Symfony 1.2 -
1.4
- 5. Jornadas Symfony http://decharlas.uji.es/symfony Presentacin
Proyectos con Symfony Jornadas Symfony
http://decharlas.uji.es/symfony
- 6. Jornadas Symfony http://decharlas.uji.es/symfony Presentacin
Proyectos con Symfony Jornadas Symfony
http://decharlas.uji.es/symfony notodohoteles.com, quiniela15.com
(cache) CondeNast - Profesional Vogue GQ
- 7. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Domesticando los
formularios: sfForm Contenido
- 8. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Contenido + Formularios el
SubFramework + Las Clases + Formularios + Widgets + Validators +
Funcionalidades y clases
- 9. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Domestiquemos los
Formularios Cmo se hace un embedded form?
- 10. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony EmbeddedForm As se hace
public function configure() { . .. $this ->embedForm(
'newPhotos' , new ObjectForm( $ObjectRelated ) ); }
- 11. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony EmbeddedForm Para esto lo
he usado class UserAdminForm extends BasesfGuardUserAdminForm {
public function configure() { . .. $profileForm = new
sfGuardUserProfileForm( $this ->object->profile); $this
->embedForm( "profile" , $profileForm ); } }
- 12. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Symfony Forms
SubFrameWork
- 13. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Symfony Forms SubFrameWork
+ Objeto Formulario: sfForm + Objeto Widget: sfWidget + Objeto
Validator: sfValidator sfForm sfWidget sfValidator
- 14. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Las Clases sfForm public
function executeContact( $request ) { $this ->form = new sfForm
(); $this ->form->setWidgets( array ( 'name' => new
sfWidgetFormInputText(), 'email' => new sfWidgetFormInputText(
array ( 'default' => 'me@example.com' )), 'subject' => new
sfWidgetFormChoice( array ( 'choices' => array ( 'Subject A' ,
'Subject B' , 'Subject C' ))), 'message' => new
sfWidgetFormTextarea(), )); } sfForm
- 15. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Las Clases sfWidget 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
- 16. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Las Clases sfValidator
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
- 17. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Fomularios sfForms
- 18. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Formularios Ejemplo
Formulario de Contacto public 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 request if ( $request ->isMethod( 'post' )){
$this ->form->bind( $request ->getParameter( $this
->form->getName()) ); if ( $this ->form->isValid() ){
var_export ( $this ->form->getValues() ); } $this
->redirect( "module/contact" ); } }
- 19. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Formularios Ejemplo
Formulario de Contacto public 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 request if ($request->isMethod('post')){
$this->form->bind(
$request->getParameter($this->form->getName()) ); if (
$this->form->isValid() ){ var_export (
$this->form->getValues() ); }
$this->redirect("module/contact"); } }
- 20. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Formularios Ejemplo
Formulario de Contacto public 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 request if ($request->isMethod('post')){
$this->form->bind(
$request->getParameter($this->form->getName()) ); if (
$this->form->isValid() ){ var_export (
$this->form->getValues() ); }
$this->redirect("module/contact"); } }
- 21. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Formularios Ejemplo
Formulario de Contacto public 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 request if ($request->isMethod('post')){
$this->form->bind(
$request->getParameter($this->form->getName()) ); if (
$this->form->isValid() ){ var_export (
$this->form->getValues() ); }
$this->redirect("module/contact"); } }
- 22. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Formularios Ejemplo
Formulario de Contacto public 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 request if ($request->isMethod('post')){
$this->form->bind(
$request->getParameter($this->form->getName()) ); if (
$this->form->isValid() ){ var_export (
$this->form->getValues() ); }
$this->redirect("module/contact"); } }
- 23. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Formularios Ejemplo
Formulario de Contacto public 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 request if ( $request ->isMethod( 'post' )){
$this ->form->bind( $request ->getParameter( $this
->form->getName()) ); if ( $this ->form->isValid() ){
var_export ( $this ->form->getValues() ); }
$this->redirect("module/contact"); } }
- 24. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Formularios Ejemplo
Formulario de Contacto public 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 request if ($request->isMethod('post')){
$this->form->bind(
$request->getParameter($this->form->getName()) ); if (
$this->form->isValid() ){ var_export (
$this->form->getValues() ); } $this ->redirect(
"module/contact" ); } }
- 25. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Fomularios Imprimiendo los
Formularios
- 26. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Formularios Vista del
Formulario de Contacto < table > < tr > < td colspan
= "2" > < input type = "submit" /> td > tr > table
> form > < ul > < li > < li > < input
type = "submit" / d > li > ul > form >
- 27. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Formularios Manipulando los
campos del formulario < ul > < li > < div class =
"error" > div > li > < li > < input type =
"submit" /> li > ul > form >
- 28. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony sfForm
- 29. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony sfForm sfForms, 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 ()) {} }
- 30. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony sfForm sfForm. class .php
sfFormField. class .php sfFormFieldSchema. class .php sfFormFilter.
class .php sfFormObject. class .php sfFormSymfony. class .php
sfFormFieldSchema sfFormField sfForm ArrayAccess Countable Iterator
Clases Relativas a los Formularios
- 31. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony sfForm Clases Relativas a
los Formularios sfForm ArrayAccess Countable Iterator sfFormSymfony
BaseForm sfFormObject
- 32. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Widgets sfWidget
sfWidgetForm sfWidgetFormInput
- 33. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Widgets sfWidgets, Options
y Attributes abstract 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 ()); }
- 34. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Widgets Widgets en Symfony
sfWidgetFormPropelChoice sfWidgetFormDoctrineChoice sfWidgetForm
sfWidgetFormDateTime sfWidgetFormSelectRadio sfWidgetFormSelect
sfWidgetFormFilterInput sfWidgetFormDateRange
sfWidgetFormInputHidden sfWidgetFormInputFile sfWidgetFormInputText
sfWidgetFormInputPassword sfWidgetFormInputFileEditable
sfWidgetFormDate sfWidgetFormTime sfWidgetFormSelectCheckbox
sfWidgetFormSelectMany sfWidgetFormFilterDate sfWidgetFormInput
sfWidgetFormSchemaDecorator sfWidgetFormTextarea
sfWidgetFormInputCheckbox sfWidgetFormChoiceBase sfWidgetFormChoice
sfWidgetFormSchema sfWidgetFormSchemaFormatterTable
sfWidgetFormSchemaFormatterList sfWidgetFormSchemaForEach
sfWidgetFormSchemaFormatter sfWidgetFormI18nChoiceCountry
sfWidgetFormI18nDate sfWidgetFormI18nTime sfWidgetFormI18nDateTime
sfWidgetFormI18nChoiceCurrency sfWidgetFormI18nChoiceTimezone
sfWidgetFormI18nChoiceLanguage
- 35. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Widgets Widgets ms 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 , ));
- 36. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Widgets Widgets ms 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' ));
- 37. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Widgets Crear 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" ); } } }
- 38. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Widgets Widgets ms 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 .= ''; return $editor ; }
}
- 39. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Widgets sfWidget abstract
class sfWidget { public function renderTag( $tag , $attributes =
array ()) { if ( empty ( $tag )) { return '' ; } return sprintf( ''
: (strtolower( $tag ) == 'input' ? '>' : sprintf( '>%s>' ,
$tag ))); } public function renderContentTag( $tag , $content =
null, $attributes = array ()) { if ( empty ( $tag )) { return '' ;
} return sprintf( '%s%s>' , $tag , $this ->attributesToHtml(
$attributes ), $content , $tag ); }
- 40. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators
- 41. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators sfValidatorBase,
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 ); }
- 42. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Validadores de
Symfony sfValidatorBase sfValidatedFile sfValidatorBoolean
sfValidatorChoice sfValidatorCSRFToken sfValidatorDate
sfValidatorDateRange sfValidatorDateTime sfValidatorEmail
sfValidatorFile sfValidatorInteger sfValidatorNumber
sfValidatorPass sfValidatorRegex sfValidatorString sfValidatorTime
sfValidatorUrl sfValidatorFromDescription sfValidatorAnd
sfValidatorOr sfValidatorCallback sfValidatorSchema
sfValidatorSchemaCompare sfValidatorSchemaFilter
sfValidatorSchemaForEach sfValidatorError sfValidatorErrorSchema
sfValidatorDecorator
- 43. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Validadores 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();
- 44. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Validadores 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 )
);
- 45. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Inicio de la
Validacin // Validacin en la accin if ( $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 ; }
- 46. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Mas sobre el
proceso de Validacin $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;
- 47. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Mas sobre el
proceso de Validacin $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;
- 48. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Mas sobre el
proceso de Validacin $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 ); }
- 49. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Mas sobre el
proceso de Validacin $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;
- 50. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Mas sobre el
proceso de Validacin $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;
- 51. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Mas sobre el
proceso de Validacin $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;
- 52. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Mas sobre el
proceso de Validacin $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;
- 53. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Proceso de
Validacin 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 ; }
- 54. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Mas sobre el
proceso de Validacin $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;
- 55. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Mas sobre el
proceso de Validacin $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;
- 56. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Mas sobre el
proceso de Validacin $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;
- 57. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Mas sobre el
proceso de Validacin $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;
- 58. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Validators Mas sobre el
proceso de Validacin $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 ); }
- 59. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Funcionalidades y
Clases
- 60. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Guardando los Formularios
de Objetos Save y doSave
- 61. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
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
- 62. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Invocando el mtodo 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 ; } ... }
- 63. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Guardando los Formularios
de Objetos Save y doSave sfFormObject::save();
sfFormObject::doSave(); sfFormsObject::updateObject();
sfFormDoctrine::processValues($values);
sfFormObject::updateXXXColumn ($value);
sfFormDoctrine::processUploadedFile();
sfFormDoctrine::doUpdateObject();
sfFormObject::updateObjectEmbeddedForms($values);
- 64. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
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
- 65. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
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
- 66. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
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
- 67. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
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
- 68. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
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
- 69. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
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
- 70. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
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
- 71. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
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
- 72. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
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
- 73. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Formularios de Objetos Las
Clases
- 74. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Formularios de Objetos
sfForm Las Clases ArticleForm BaseArticleForm BaseFormDoctrine
sfFormDoctrine sfFormObject BaseForm sfFormSymfony ArrayAccess
Countable Iterator
- 75. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Filtros del Admin Generator
Las Clases
- 76. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Formularios de Objetos
sfForm Las Clases ArticleForm BaseArticleFormFilter
BaseFormFilterDoctrine sfFormFilterDoctrine sfFormFilter BaseForm
sfFormSymfony ArrayAccess Countable Iterator
- 77. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Comparacin de Clases Las
Clases ArticleFormFilter BaseArticleFormFilter
BaseFormFilterDoctrine sfFormFilterDoctrine sfFormFilter BaseForm
ArticleForm BaseArticleForm BaseFormDoctrine sfFormDoctrine
sfFormObject BaseForm
- 78. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony Muchas Gracias CTO Jos
Antonio Pio Gil
- 79. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas
Symfony http://decharlas.uji.es/symfony [email_address]
http://twitter.com/josetonyp