Simplemente agrega el dato en el beforeSave() de tu modelo:
class NomberModelo extends AppModel
{
var $name = 'NomberModelo';
function beforeSave()
{
if (!isset($this->data['created_by']))
{
$valor = 'Mariano Iglesias';
$this->data['created_by'] = $valor;
}
}
}
Ahora como tu dato sale de la sesión, en tu modelo *NO* vas a poder (o no
debieras) usar el componente Session. Hay diferentes alternativas, yo en
este caso lo que haría es usar Configure. En mi AppController, en el
beforeFilter haría algo así:
function beforeFilter()
{
if ($this->Session->check('User.username'))
{
Configure::write('App.user',
$this->Session->read('User.username'));
}
return parent::beforeFilter();
}
Y luego el beforeSave() anterior lo cambiaría:
class NomberModelo extends AppModel
{
var $name = 'NomberModelo';
function beforeSave()
{
if ((!isset($this->data['created_by']) ||
empty($this->data['created_by'])) && Configure::read('App.user') != null)
{
$this->data['created_by'] =
Configure::read('App.user');
}
}
}
Se podría simplificar con variables globales pero prefiero toda la vida usar
Configure, que es más OOP y persigue este propósito.
Luego de hacer esto cuando hagas:
$this->NomberModelo->save($this->data);
Si el usuario existe (es decir si en la sesión hay un valor con clave
User.username), y si en $this->data NO LE especificaste el campo
"created_by" (esto para evitar sobrescribir el valor si vos lo querés setear
manualmente), entonces el modelo automáticamente le asignaría al campo
"created_by" el usuario en la sesión.
-MI
---------------------------------------------------------------------------
Remember, smart coders answer ten questions for every question they ask.
So be smart, be cool, and share your knowledge.
BAKE ON!
blog: http://www.MarianoIglesias.com.ar
-----Mensaje original-----
De: [email protected] [mailto:[EMAIL PROTECTED] En
nombre de carlosrg
Enviado el: Jueves, 08 de Marzo de 2007 12:45 p.m.
Para: CakePHP-es
Asunto: Añadir campo usuario en tablas
Si se añade el campo 'created' y/o 'modified' en las tablas, Cake a la
hora de añadir o guarda un registro, te actualiza ambos campos.
Cual es la mejor forma de hacer lo mismo pero con un nuevo campo, en
mi caso, created_by?
Lo que hacía era, crear el campo 'created_by' en las tablas que me
interesaran y luego añadir en los métodos del controlador, la
siguiente línea:
$this->NomberModelo->set('created_by', $this->Session-
>read('User.username'));
Es una forma correcta de hacerlo? Es que eso de tenerlo que repetir en
cada método...
--~--~---------~--~----~------------~-------~--~----~
Has recibido este mensaje porque estás suscrito a Grupo "CakePHP-es" de Grupos
de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a [email protected]
Para anular la suscripción a este grupo, envía un mensaje a [EMAIL PROTECTED]
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/CakePHP-es?hl=es.
-~----------~----~----~----~------~----~------~--~---