I may be off the mark on what you're trying to do, but here goes.

In my brief experience with catalyst, inheritance doesn't do much for you when constructing actions. I believe that chained actions are pretty tightly bound to the urls you are building, so there's no way to reuse them for different urls. That said, something I often do is $c->forward my way to common private functions, rather than try to do it through inheritance. So, from that same project:

sub find_tutorial :Chained('/') PathPart('tutorials') CaptureArgs(1) {

    $_[1]->forward('/exists',['tutorial' => 'Tutorial' => $_[2] ])
}
sub find_comment :Chained('find_tutorial') PathPart('comments') CaptureArgs(1) {

$_[1]->forward('/exists',['comment' => 'Comment::Thread' => $_[2] ])
}

where, 'exists' is defined in my root controller as:

sub exists :Private {

    my( $self, $c, $name, $class, $id ) = @_;

    unless( $c->stash->{$name} = $c->model("DB::$class")->find($id) ) {
        $c->res->status('404');
        $c->detach('/default');
    }
}

HTH

Stephen

On Jun 29, 2010, at 6:06 AM, John Lifsey - Contractor - 5595 wrote:


On 6/25/10 12:08 PM, Stephen Howard wrote:
/tutorials
/tutorials/*
/tutorials/*/comments
/tutorials/*/comments/*
/tutorials/*/comments/*/replies
/tutorials/*/comments/*/replies/*

#
------------------------------------------------------------------------------

sub list :Chained('/') PathPart('tutorials') Args(0) :
ActionClass('REST') {}

sub list_GET { ... }
sub list_POST { ... }
sub list_HEAD { ... }

#
------------------------------------------------------------------------------

sub find_tutorial :Chained('/') PathPart('tutorials') CaptureArgs(1) {
... }

#
------------------------------------------------------------------------------

sub single :Chained('find_tutorial') PathPart('') Args(0)
ActionClass('REST') { ... }
sub single_GET { ... }
sub single_POST { ... }

#
------------------------------------------------------------------------------

sub comments :Chained('find_tutorial') PathPart('comments') Args(0)

Well, if you teach a man to fish, apparently he'll ask you to teach him how to fly spaceships next.

While this example worked well, it led me to another related problem. I have a parent Controller class for typical behavior on a resource from which I inherit and override as needed for each type of resource.

package MyBaseController;
extends 'Catalyst::Controller::REST';

sub index : Chained PathPrefix Args(0) ActionClass('REST') {}
sub find : Chained PathPrefix CaptureArgs(1) {}
sub single : Chained('find') PathPart('') Args(0) {}
etc..

1;

Using the previous poster's example this works just fine in
MyApp::Controller::Tutorial

but it will not work for MyApp::Controller::Tutorial::Comments
At first, from looking at the documentation I thought that setting the controller config key "path" to a regex or "/tutorial/*/" might do the trick, but alas it does not.

This is further complicated by my desire to break from the previous example and allow Comments to be at the same hierarchical level as Tutorial. That is to say:

MyApp::Controller::Tutorial ISA MyBaseController;
and
MyApp::Controller::Comments ISA MyBaseController;

So that I could reference a particular comment ID at /myapp/comments/ * or at /myapp/tutorial/*/comments/*

Upon documentation review I thought __PACKAGE__- >config(action=>{'*'=>{ blah, blah }}); would be my salvation, but it appears that '*' doesn't actually work in myapp, at least as written in the documentation.

Now that I've gotten myself worked entirely into a lather thinking in circles it's time to request insight from the crowd. Any suggestions?


_______________________________________________
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/


_______________________________________________
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