Problema al personalizar la clase Usuario

Buenas,

Necesito personalizar la clase Usuario. Sigo todos los pasos pero en lugar de tomarme mi nueva clase toma la del core. Describo como la cree, es raro porque personalice muchas clases y no tuve problema con ninguna, pero con esta me esta pasando que no la reconoce.

  1. creo el archivo en /src/pers/admin/modelo/usuario.php
  2. le puse el namespace de la personaliación y la extendí de la clase original:
<?php namespace admin\modelo; class usuario extends \siu\modelo\usuario { ... } 3. Concretamente para comprobar cual de las dos esta tomando, en el metodo "nuevo" agregue al principio var_dump("Personalizacion"); die(); en mi clase nueva y var_dump("Core"); die(); en la clase original. Al intentar registrar un usuario nuevo me devuelve: string 'Core' (length=11) Con esto compruebo que levanta la clase usuario del core y no la mía. Gracias de antemano.

Hola Alan,

Consulta: ¿desde dónde y cómo estás tratando de usar los métodos personalizados en esa nueva clase? Creo imaginar por dónde viene el problema, pero espero tu respuesta y lo vemos bien.

Saludos,
Fernando

Buenas tardes,

No cambie el lugar desde donde se usa, simplemente necesitaba extender el metodo “nuevo” para que cada vez que se crea un nuevo usuario se inserte un registro en una tabla, por lo tanto solo agregue unos inserts al final del método

Saludos!

Hola Alan,

El problema está en el uso de servicios estáticos. Lo tenemos identificado y con intenciones de cambiarlo en una próxima versión, para flexibilizar este tipo de personalizaciones, pero te ofrezco una solución alternativa por ahora. Mirá este ejemplo en siu\operaciones\acceso\controlador:


<?php
namespace siu\operaciones\acceso;
...
use siu\modelo\usuario;

class controlador extends controlador_preinscripcion
{
	...
	
	function accion__recuperar()
	{
		$pagelet = $this->vista()->set_pagelet('recuperar_pass');
		
		if (kernel::request()->isPost()) {
			$email_raw = $this->get_usuario_sin_validar();
			try {
				$email = $this->validate_param('usuario', 'post', validador::TIPO_MAIL);
				
				if (($this->usa_captcha()) && (!$this->check_recaptcha())) {
					$this->add_error($this->trans('error_recaptcha'));
					return;
				}
				
				$token = usuario::solicitud_resetear_clave($email);
				
				$this->enviar_mail_recuperar_pass($email, $token);
				$pagelet->set_estado_info(pagelet_recuperar_pass::MAIL_ENVIADO);
				$this->add_var('email', $email);
			} catch (error_kernel_validacion $e) {
				$this->add_error($this->trans('login_error_formato_mail'), $e);
				$this->add_var('nombre_usuario', $email_raw);
			} catch (error_preinscripcion_login $e) {
				$pagelet->set_estado_info(pagelet_recuperar_pass::MAIL_NO_EXISTENTE);
			}
		}
	}
	
	...
}
?>

Como se puede ver, se está consumiendo directamente el servicio estático provisto por la clase siu\modelo\usuario (en este ejemplo, usuario::solicitud_resetear_clave). Si quisieras usar la función redefinida en la clase propia, deberías (por ahora) personalizar también esta clase consumidora, para cambiar el “use”.


<?php
namespace <nombre_pers>\operaciones\acceso;

use <nombre_pers>\modelo\usuario;

use kernel\kernel;
use kernel\error_kernel_validacion;
use siu\errores\error_preinscripcion_login;
use siu\operaciones\acceso\pagelet_recuperar_pass;
use kernel\util\validador;

class controlador extends \siu\operaciones\acceso\controlador
{
	function accion__recuperar()
	{
		$pagelet = $this->vista()->set_pagelet('recuperar_pass');
		
		if (kernel::request()->isPost()) {
			$email_raw = $this->get_usuario_sin_validar();
			try {
				$email = $this->validate_param('usuario', 'post', validador::TIPO_MAIL);
				
				if (($this->usa_captcha()) && (!$this->check_recaptcha())) {
					$this->add_error($this->trans('error_recaptcha'));
					return;
				}
				
				$token = usuario::solicitud_resetear_clave($email);
				
				$this->enviar_mail_recuperar_pass($email, $token);
				$pagelet->set_estado_info(pagelet_recuperar_pass::MAIL_ENVIADO);
				$this->add_var('email', $email);
			} catch (error_kernel_validacion $e) {
				$this->add_error($this->trans('login_error_formato_mail'), $e);
				$this->add_var('nombre_usuario', $email_raw);
			} catch (error_preinscripcion_login $e) {
				$pagelet->set_estado_info(pagelet_recuperar_pass::MAIL_NO_EXISTENTE);
			}
		}
	}
}
?>

Cualquier cosa avisame.

Saludos,
Fernando