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> </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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---