[Catalyst] Where to put common functions & how to get user id

Matt S Trout dbix-class at trout.me.uk
Thu May 29 12:04:40 BST 2008

On Tue, May 27, 2008 at 08:13:06AM +0200, jakac wrote:
> Hello!
> Can someone please explain where should I put common functions such as
> "action logging" (my app is designed so that it actually logs any 
> inserts/updates
> of data)?
> My table for logging this data is called "worklog" and contains 
> following columns:
> * id
> * date
> * time
> * user_id (integer)
> * action (text)
> in my older (non-catalyst) application I had a common function defined as:
> sub workLog {
>   my ($dbh,$user_id,$action) = @_;
>   return $dbh->do("insert into worklog user_id,action values 
> ('$user_id','$action');");
> }
> And whenever I needed to log something I just used a call like:
> &workLog($dbh,$user_id, ' User updated table foo column bar');

Using &name for calling functions when you already know the name is perl 4.

Do NOT, EVER do it in perl 5.

> Also the other thing is - how to get active user's ID? When I 
> authenticate my user
> using Authentication plugin (using $c->login($username,$password)) the 
> $c->user->id
> contains that user's username and not his ID.

In Catalyst auth terms the 'id' is what the user uses to identify to the
app. It doesn't know about the rest of your DB schema.
> My users table contains following columns:
> * user_id
> * username
> * password
> * first name, last name etc.......
> user authenticates using his username&password just like in "Catalyst 
> authentication tutorial"
> but my application always needs user's ID so I always have to search for 
> this user in the
> database...

No you don't.

$c->user->obj returns the DBIC object.

So $c->user->obj->user_id will give you the user_id.

Although really, you shouldn't need that in your controller. Why do you
think you need a model-specific integer in code that's not supposed to
understand the model?

      Matt S Trout       Need help with your Catalyst or DBIx::Class project?
   Technical Director                    http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://chainsawblues.vox.com/            http://www.shadowcat.co.uk/servers/

More information about the Catalyst mailing list