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 __('#webmaster_mail'); ?></a></
> >  p>
> >  </div>
>
> >  <div id="mainContent">
> >         <h2><?php echo __('Usuarios'); ?></h2>
>
> >         <div class="list">
>
> >                 <div class="listHeader clearfix">
> >                         <h3><?php echo __('Cambiar contraseña'); ?> : <span
> >  class="recordName"><?php echo $this->data['User']['email']; ?></span></
> >  h3>
> >                 </div>
>
> >                 <?php echo $form->create('User', array('action' =>
> >  'changepassword')) ?>
>
> >                         <div class="editForm">
>
> >                                 <?php if ( $passwords_match_error == 1 ) : 
> > ?>
> >                                 <div class="editFormErrorMsg">
> >                                         <?php echo 
> > $passwords_match_error_msg; ?>
> >                                 </div>
> >                                 <?php endif; ?>
>
> >                                 <div class="formRow clearfix">
>
> ...
>
> read more »
--~--~---------~--~----~------------~-------~--~----~
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