Does anyone have any idea?

On 7 abr, 20:25, elHobbit <[EMAIL PROTECTED]> wrote:
> Thanks b logica.
>
> But, I really need to use the validation rules in the User model.
> I'll try to overwrite the validation rules for the fields I'm not
> using in this view.
> Anyway, I think the problem isn't that, because with different fields
> the form works ok.
>
> Again, thanks for your help.  :)
>
> On Apr 7, 7:31 pm, "b logica" <[EMAIL PROTECTED]> wrote:
>
> > If the problem is that Cake is trying to validate User when
> > unnecessary you could try what Dardo just suggested for a similar
> > problem I was having. Put this in your edit() action:
>
> > $this->User->validate = array();
>
> > On Mon, Apr 7, 2008 at 4:42 PM, elHobbit <[EMAIL PROTECTED]> wrote:
>
> > >  First, excuse me for my poor english.
>
> > >  I'm using Cake 1.2.6311. I'm having a weird problem validating some
> > >  fields from my model.
>
> > >  The situation is like that:
>
> > >  - One model "users" with validation rules.
> > >  - "Users" controller with 2 basic actions: 'edit' & 'changepassword'.
> > >  - The problem: in the action "changepassword" where I'm only showing
> > >  the field "password" (and hidden ID field) when the form is submited
> > >  I'm obtaining a connection reset.
>
> > >  The weird thing is:
>
> > >  - If I add this two lines, in which I set the value for the "email"
> > >  into the ['data'] array the forms submits OK and the validation is
> > >  triggered.
> > >  ------------------------------------------------------------------
> > >  $pp = $this->User->read( null, $id );
> > >  $this->data['User']['email'] = $pp['User']['email'];
> > >  ------------------------------------------------------------------
>
> > >  - If the only showed field is "email" the form is submited OK and the
> > >  validation triggered as expected without manually loading the
> > >  "password" field to the "data" array. So I guess this is not a problem
> > >  related with some requirement of having all "validated" fields in the
> > >  form.
>
> > >  My question is:
> > >  Why if I only show the "email" field everything works fine. But with
> > >  the field "password" I've to use the workaround from above?
> > >  I'm very new with Cake so is VERY POSSIBLE I'm doing something veeeery
> > >  wrong.
>
> > >  Someone can help me with this issue? Thanks for your attention.
>
> > >  PS: here is the code of my files:
>
> > >  User Model:
> > >  
> > > -------------------------------------------------------------------------------------
> > >  <?php
> > >  class User extends AppModel{
>
> > >         var $name = 'User';
> > >         var $belongsTo = array( 'Company', 'Group' );
>
> > >     var $validate = array(
>
> > >                 'email' => array(
> > >                         'required' => array(
> > >                                 'rule' => 'email',
> > >                         'required' => true,
> > >                                 'message' => 'Ingrese una dirección de 
> > > e-mail válida'
> > >                         )
> > >                 ),
>
> > >                 'password' => array(
> > >                         'required' => array(
> > >                                 'rule' => VALID_NOT_EMPTY,
> > >                                 'message' => 'Debe indicar su contraseña'
> > >                         )
> > >                 ),
>
> > >                 'company_id' => array(
> > >                         'required' => array(
> > >                                 'rule' => VALID_NOT_EMPTY,
> > >                                 'message' => 'Seleccione una empresa'
> > >                         )
> > >                 ),
>
> > >                 'group_id' => array(
> > >                         'required' => array(
> > >                                 'rule' => VALID_NOT_EMPTY,
> > >                                 'message' => 'Seleccione el grupo al que 
> > > pertenece el usuario'
> > >                         )
> > >                 ),
>
> > >                 // campo adicional para confirmar la contraseña, no 
> > > existe en la
> > >  BBDD
> > >                 'password_conf' => array(
> > >                         'required' => array(
> > >                                 'rule' => VALID_NOT_EMPTY,
> > >                                 'message' => 'Debe confirmar su 
> > > contraseña'
> > >                         )
> > >                 )
>
> > >         );
>
> > >  }
> > >  ?>
>
> > >  Users controller
> > >  
> > > -------------------------------------------------------------------------------------
> > >  <?php
>
> > >  class UsersController extends AppController{
>
> > >         var $name = 'Users';
> > >         var $paginate = array( 'limit' => 15, 'page' => 1 );
>
> > >         function control_view() {
> > >                 ..........
> > >         }
>
> > >         function control_edit( $id = null ) {
> > >                 // protección por tipo de admin
>
> > >                 // inicialización
> > >                 $this->layout = 'default';
>
> > >                 // datos necesarios
> > >                 $companies = $this->User->Company->find( 'list' );
> > >                 $this->set('companies', $companies );
>
> > >                 $groups = $this->User->Group->find( 'list' );
> > >                 $this->set('groups', $groups );
>
> > >                 // si no se ha enviado el formulario carga el ID del 
> > > registro a
> > >  editar
> > >                 if ( empty( $this->data ) ) :
> > >                         $this->User->id = $id;
> > >                         $this->data = $this->User->read();
> > >                 else :
> > >                         // si se ha enviado y valida guarda los datos
> > >                         if ( $this->User->create($this->data) && 
> > > $this->User-
> > >  >validates() ) :
>
> > >                                 // encripta la contraseña si se está 
> > > insertando
> > >                                 if ( empty( $id ) ) :
> > >                                         $this->data['User']['password'] = 
> > > md5( $this->data['User']
> > >  ['password'] );
> > >                                 endif;
>
> > >                                 if( $this->User->save( 
> > > $this->data['User'] ) ) :
> > >                                         $this->redirect('view');
> > >                                 endif;
>
> > >                         endif;
> > >                 endif;
>
> > >         }
>
> > >         function control_delete( $id = null ) {
> > >                 ......................
> > >         }
>
> > >         function control_changepassword( $id = null ) {
> > >                 // protección por tipo de admin
> > >                 if ( $this->Session->read('Administrator.superadmin') != 
> > > 1 ) : $this-
> > >  >redirect('/control/'); endif;
>
> > >                 // inicialización
> > >                 $this->layout = 'default';
>
> > >                 // inicialización variables
> > >                 $this->set('passwords_match_error', 0 );
>
> > >                 // si no se ha enviado el formulario carga el ID del 
> > > registro a
> > >  editar
> > >                 if ( empty( $this->data ) ) :
> > >                         $this->User->id = $id;
> > >                         $this->data = $this->User->read();
> > >                         // dejo en blanco la contraseña para permitir 
> > > cambiarla
> > >                         $this->data['User']['password'] = '';
> > >                 else :
> > >                         // no se porqué, pero debo cargarle aunque sea un 
> > > valor del
> > >  registro al array data para que funcione la validación
> > >                         $pp = $this->User->read( null, $id );
> > >                         $this->data['User']['email'] = 
> > > $pp['User']['email'];
>
> > >                         // si se ha enviado y valida guarda los datos
> > >                         if ( $this->User->create( $this->data['User'] ) 
> > > && $this->User-
> > >  >validates() ) :
> > >                                 // si estoy editando
> > >                                 if ( !empty( $id ) ) :
> > >                                         // si los campos coinciden guardo 
> > > la nueva contraseña y
> > >  redirecciono
> > >                                         if ( 
> > > $this->data['User']['password'] == $this->data['User']
> > >  ['password_conf'] ) :
> > >                                                 // encripta la contrasña
> > >                                                 
> > > $this->data['User']['password'] = md5( $this->data['User']
> > >  ['password'] );
> > >                                                 // guarda la contraseña
> > >                                                 if( $this->User->save( 
> > > $this->data['User'] ) ) :
> > >                                                         
> > > $this->redirect('view');
> > >                                                 endif;
>
> > >                                         else:
> > >                                                 // guarda el error
> > >                                                 
> > > $this->set('passwords_match_error', 1);
> > >                                                 
> > > $this->set('passwords_match_error_msg', __('Las contraseñas
> > >  introducidas no coinciden. Por favor inténtelo nuevamente.', true) );
> > >                                         endif;
>
> > >                                 else:
> > >                                                 $this->redirect('view');
> > >                                 endif;
> > >                         endif;
>
> > >                 endif;
> > >         }
>
> > >  }
> > >  ?>
>
> > >  Users changepassword view
> > >  
> > > -------------------------------------------------------------------------------------
> > >  <div id="sidebar" class="floatLeft">
> > >         <h3><?php echo __('Ayuda'); ?></h3>
> > >         <p><?php echo __('En esta sección podrá crear y administrar los
> > >  usuarios de la aplicación.'); ?></p>
> > >         <p>&nbsp;</p>
> > >         <h3><?php echo __('Asistencia técnica'); ?></h3>
> > >         <p><?php echo __('Si encuentra algún problema con la aplicación,
> > >  comuníquese con'); ?> <a href="mailto:<?php echo
> > >  __('#webmaster_mail'); ?>"><?php echo
>
> ...
>
> leer más »
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake 
PHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to