No subject


Thu Feb 23 00:47:41 CET 2006


like I could just say "my ( $self, $c ) = @_;" instead
of "my $self = shift;" but for some reason I have
trouble with that.  Should that work?  And how could I
get the context object if I had something like:

package mycontroller;
use base 'Catalyst::Controller';

sub index: Private
{
     my ($self, $c) = @_;

    $self->test;
}

sub test
{
     my $self = shift @_;

     ##I NEED the $c here?
}

Maybe there is different best practices way for me to
do this.  Your suggestions would be helpful.

On a side issue, right now I am working on a project
using catalyst and trying to get my client to agree to
me posting the code in a public location for other
developers to check out.  If I can do this is there a
place where catalyst developers prefer to find such
examples?  For example I noticed a list of catalyst
driven sites on the developers wiki.

Thanks!  --john

--- Matt S Trout <dbix-class at trout.me.uk> wrote:

> John Napiorkowski wrote:
> > Hi,
> > 
> > I'm creating a class that subclasses from Catalyst::Controller for 
> > use to encapsulate some functionality for certain pages on my site.  
> > I
> realize
> > that this could be potentially done with with a
> > plugin, but for this purpose I feel subclassing Catalyst::Controller 
> > is the cleanest and most maintainable approach.
> > 
> > The problem I am having is that I want my
> controller
> > to prepare some data when it is first loaded.  The
> > function is to create a list of objects that will
> > later be retrieved, so I can't just put it into
> the
> > config.  However I can't figure out the best why
> (or
> > the best practices way) to do that.  Should I just
> > write my own new subroutine to do this?
> 
> If you're trying to do something at initialisation
> time, overriding new() is
> the logical approach. Just do something like
> 
> sub new {
>    my $self = shift;
>    my $new = $self->NEXT::new(@_);
>    $new->init;
>    return $new;
> }
> 
> > Another problem.  There is some strange things
> going
> > on when I have a config in a base controller.  For
> > example I have a class "element" that inherits
> from
> > "Catalyst::Controller" which has the following
> line
> > (again this is contrived a bit for clarity):
> > 
> > package element;
> > 
> > use strict;
> > use warnings;
> > 
> > use base qw/Catalyst::Controller/;
> > 
> > __PACKAGE__->config( view => 'element');
> > 
> > sub view
> > {
> >   $self = shift;
> >   return $self->{view};
> > }
> > 
> > Then I have two classes that inherit from this
> element
> > class:
> > 
> > package page;
> > 
> > use base qw/element/;
> > 
> > __PACKAGE__->config( view => 'page');
> > 
> > 
> > and
> > 
> > package portlet;
> > 
> > use base qw/element/;
> > 
> > __PACKAGE__->config( view => 'portlet');
> > 
> > So all three classes have a method called "view".
> > However this method doesn't do what I would think
> it
> > would.  If I subclass any of these three classes
> for a
> > catalyst controller and call $self->view on that
> > subclass I always get 'portlet' as a response,
> instead
> > of what was defined in the config for the local
> class.
> >  Maybe I just don't understand how this is
> supposed to
> > work?
> 
> Not sure, that looks pretty much fine. It may be
> something going a bit odd in
> the way the Class::Data::Inheritable setup works,
> though I've never 
> encountered any major problems. Try doing
> 
> __PACKAGE__->_config({ %{ __PACKAGE__->_config } });
> 
> or so before you call ->config in the subclasses and
> see if it sorts it. If it
> does, a failing test case against Catalyst (since
> that shouldn't be necessary) 
> would be welcome :)
> 
> > Oh, one last quick thing: Is there an easy way to
> get
> > the context object if you only have the self
> object,
> > like in a controller where you have make some
> local
> > accessors?  This is causing me a lot of trouble.
> > Any thoughts or questions from the community would
> be
> > appreciated.
> 
> when Catalyst retrieves a component of any type for
> use, if the component has
> an ACCEPT_CONTEXT method it calls that with $c as an
> argument and returns the 
> result.
> 
> -- 
>       Matt S Trout       Offering custom
> development, consultancy and support
>    Technical Director    contracts for Catalyst,
> DBIx::Class and BAST. Contact
> Shadowcat Systems Ltd.  mst (at)
> shadowcatsystems.co.uk for more information
> 
> + Help us build a better perl ORM:
> http://dbix-class.shadowcatsystems.co.uk/ +
> 
> _______________________________________________
> Catalyst mailing list
> Catalyst at lists.rawmode.org 
> http://lists.rawmode.org/mailman/listinfo/catalyst
> 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

_______________________________________________
Catalyst mailing list
Catalyst at lists.rawmode.org
http://lists.rawmode.org/mailman/listinfo/catalyst

---------------------------------------------------------------------------------------------------------
This e-mail message may contain privileged and/or confidential information, and is intended to be received only by persons entitled to receive such information. If you have received this e-mail in error, please notify the sender immediately. Please delete it and all attachments from any servers, hard drives or any other media. Other use of this e-mail by you is strictly prohibited.


All e-mails and attachments sent and received are subject to monitoring, reading and archival by Monsanto. The recipient of this e-mail is solely responsible for checking for the presence of "Viruses" or other "Malware". Monsanto accepts no liability for any damage caused by any such code transmitted by or accompanying this e-mail or any attachment.
---------------------------------------------------------------------------------------------------------




More information about the Catalyst mailing list