Hi,

please could someone explain how Catalyst determines the precedence of actions, specifically in relation to the following simple chained example. It doesn't behave in the way I would expect for requests numbered 4 and 6:

1. http://127.0.0.1:3001/action0 => Matched action 0
2. http://127.0.0.1:3001/action0/abc => Matched XPages / pages
3. http://127.0.0.1:3001/action1 => Matched XPages / pages
4. http://127.0.0.1:3001/action1/abc => Matched XPages / pages
5. http://127.0.0.1:3001/actionx => Matched action x
6. http://127.0.0.1:3001/actionx/abc => Matched XPages / pages

The controllers are detailed below:

package TestApp::Controller::Root;
use Moose;
use namespace::autoclean;

BEGIN { extends 'Catalyst::Controller' }

__PACKAGE__->config(namespace => '');

sub site_base :Chained :PathPart('') :CaptureArgs(0) {
    my ($self,$c ) = @_;
}

sub action0 :Path('action0') :Args(0) {
    my ($self,$c ) = @_;
    $c->response->body( "Matched action 0" );
}

sub action1 :Path('action1') :Args(1) {
    my ($self,$c ) = @_;
    $c->response->body( "Matched action 1" );
}

sub actionx :Path('actionx') :Args() {
    my ($self,$c ) = @_;
    $c->response->body( "Matched action x" );
}

sub end : ActionClass('RenderView') {}

__PACKAGE__->meta->make_immutable;

1;

package TestApp::Controller::XPages;
use Moose;
use namespace::autoclean;

BEGIN {extends 'Catalyst::Controller'; }

sub base : Chained( '/site_base' ) : PathPart('') : CaptureArgs( 1 ) {
    my ( $self, $c ) = @_;
}

sub pages : Chained( 'base' ) : PathPart('') : Args() {
    my ( $self, $c ) = @_;
    $c->response->body('Matched XPages  / pages');
}

__PACKAGE__->meta->make_immutable;

1;


Thanks for any help you can give

Nick Anderson

_______________________________________________
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