2010-11-22 3 views
0

J'ai une fonction de consignation dans mon projet qui suit toutes les modifications apportées à plusieurs modèles différents. Dites, chaque fois qu'un utilisateur ou un administrateur modifie un compte. Ou lorsqu'un utilisateur crée un nouvel enregistrement. Toutes ces actions sont enregistrées dans la table de journal.Comment obtenir le nom du modèle et de l'action de l'action appelant

Je souhaite que le modèle de journal récupère le nom du modèle et le nom de l'action lui-même dans une action beforeSave lorsqu'il est appelé pour enregistrer un nouvel enregistrement. Je l'appelle maintenant d'une action de contrôleur faisant l'enregistrer comme ceci:

$this->Log->save(array(
    'user'=>$this->Auth->user('id'), 
    'model'=>$this->name, 
    'action'=>$this->action)); 

J'aimerais être en mesure de raccourcir jusqu'à:

$this->Log->save(); 

Répondre

1

J'ai trouvé le merveilleux LogableBehavior d'Alkerman et il fonctionne comme un charme. Pas besoin de réinventer la roue.

0

Je pense que je serais enclin à écrire soit un procédé tel que le app_controller

saveLog() qui appelle

$this->Log->save($uma_array)

ou simplifier construire votre existante en faisant

$this->Log->save($this)

et les données contenues dans démêlant la méthode.

EDIT:

Bien sûr, la meilleure façon de le faire serait d'utiliser le comportement observable en utilisant le modèle de teknoid: http://nuts-and-bolts-of-cakephp.com/2009/08/10/observer-pattern-the-cakephp-way/ Il est pas si difficile à mettre en œuvre.

+0

Il est préférable d'écrire la méthode save() dans le modèle de journal. – bancer