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">
>                                         <?php echo 
> $form->label('User.password', __('Contraseña nueva',
>  true) . ' <em>*</em>', array('class' => 'floatLeft w200px alignRight
>  marginRight20')); ?>
>                                         <div class="floatLeft">
>                                                 <?php echo 
> $form->input('User.password', array('type' =>
>  'password', 'div' => false, 'label' => false, 'class' => 'textField
>  w150px')); ?>
>                                         </div>
>                                 </div>
>
>                                 <div class="formRow clearfix">
>                                         <?php echo 
> $form->label('User.password_conf', __('Confirmar
>  contraseña nueva', true) . ' <em>*</em>', array('class' => 'floatLeft
>  w200px alignRight marginRight20')); ?>
>                                         <div class="floatLeft">
>                                                 <?php echo 
> $form->input('User.password_conf', array('type' =>
>  'password', 'div' => false, 'label' => false, 'class' => 'textField
>  w150px')); ?>
>                                         </div>
>                                 </div>
>
>
>                         </div>
>
>                         <div class="editFormButtons">
>                                 <p><?php echo $form->submit(__('Guardar', 
> true), array('div' =>
>  false, 'class' => 'button') ); ?>&nbsp;&nbsp;<?php echo __('o'); ?> <?
>  php echo $html->link(__("Cancelar",true), 'view' ); ?></p>
>                         </div>
>
>                         <?php echo $form->input('User.id', array('type' => 
> 'hidden' ) ); ?>
>
>                 <?php echo $form->end(); ?>
>
>         </div>
>
>  </div>
>  >
>

--~--~---------~--~----~------------~-------~--~----~
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