[Catalyst] Catalyst Actions precedence

Nick Anderson nick at webcraftcs.com
Wed Feb 27 21:20:15 GMT 2013


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



More information about the Catalyst mailing list