On Mon, Sep 20, 2010 at 1:46 AM, David Schmidt <[email protected]> wrote:

> On Mon, Sep 20, 2010 at 4:33 AM, John Romkey <[email protected]>
> wrote:
> > On Sep 19, 2010, at 10:02 PM, Pavel A. Karoukin wrote:
> >> I started to play more often with Catalyst framework and found that I
> often need to re-use some controllers logic. What the best DRY way to deal,
> for example, with Login/Register/Forgotpassword controllers?
> >>
> >> I mean I created one controller for one app. For another app I am doing
> I need to recreate everything, which ends up in plain copy/pasting and
> changing class names. I do not like this, this doesn't feel DRY. Is there
> some better way? Something plugable and unplugable with their own
> models/controller/view may be?
> >
> > One approach is to simply inherit from the controller you want to reuse.
> So, package up the controllers you want to reuse together, then use Moose to
> extend them in the  controller modules in each app that uses them. That
> allows you quite a bit of flexibility; use a common convention for the start
> of the dispatch chain (for instance, 'base') for each controller and then
> your subclass can map its parent controller to whatever path is best for
> each app.
> >        - john romkey
> >        http://www.romkey.com/
> >
> >
> > _______________________________________________
> > List: [email protected]
> > Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> > Searchable archive:
> http://www.mail-archive.com/[email protected]/
> > Dev site: http://dev.catalyst.perl.org/
> >
>
> Another nice approach to reuse Controller Logic is to use Moose Roles.
>
> I got the basics from t0ms blog
> (http://bobtfish.livejournal.com/#post-bobtfish-264317)
> An example how i use it can be found here
>
> http://wiki.catalystframework.org/wiki/wikicookbook/controllerwithfileupload
> (the interesting part is in the file Resource.pm in the attachment
>
> http://wiki.catalystframework.org/wiki/wikicookbook/ControllerWithFileUpload.attachment/100
> )
>
>
> *************
> package CatalystX::TraitFor::Controller::Resource;
> use MooseX::MethodAttributes::Role;
> use namespace::autoclean;
>
> sub base : Chained('') PathPart('') CaptureArgs(0) {
>    my ($self, $c ) = @_;
>    ...
> };
>
> sub index :Chained('base') :PathPart('') :Args(0) {
>    my ($self, $c ) = @_;
>    ...
> }
> 1;
> *************
>
>
>
>
Thank you David. This looks very close to what I had in head. I will look
more in to it!

Regards,
Pavel
_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/

Reply via email to