Hi Kieren,

Thanks for the quick reply.

I hadn't missed out chained("site_base"), as I didn't want those actions to to be part of any chain. But what I did expect was the Args(1) action (request 4) to behave in the same way as Args(0) (request 1) which it doesn't and instead ends up going to the chained action in XPages. It didn't seem consistent/predictable to me?

Thank you for the book link which will be useful. I do have a fairly good understanding of the chained process but this specific example seemed to throw up an anomaly where the request could equally be satisfied by the chained action or the normal action but the chained action took precedence except when 0 args were specified. Is Args(0) a special case? Is there not an order of precedence for resolving requests specified somewhere?

Thanks,

Nick


On 27/02/13 21:50, Kieren Diment wrote:
On 28/02/2013, at 8:20 AM, Nick Anderson<[email protected]>  wrote:

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 ) = @_;
}

You seem to have missed :Chained('site_base') from all the sub attributes below.

Check the DwarfChains app in the catalyst book code (chapter 7 available from - 
http://www.apress.com/downloadable/download/sample/sample_id/205/ ) for an 
example along the same lines of yours that works.

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/

_______________________________________________
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