fREW Schmidt wrote:


On Mon, Aug 10, 2009 at 1:00 PM, Matija Grabnar <[email protected] <mailto:[email protected]>> wrote:

    J. Shirley wrote:

        On Sun, Aug 9, 2009 at 7:31 AM, Matija Grabnar
        <[email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>>
        wrote:

           I think this may be either a bug or something I don't
        understand
           about specifying chained actions.

           Suppose I have a controller which has a defined default action
           (such as created by catalyst.pl by default, i.e.


           sub default :Path {
             my ( $self, $c ) = @_;
             $c->response->body( 'Page not found' );
             $c->response->status(404);
           }

           To that I add a root action, the start of the chain, like so:

           sub index :Chained('/') PathPart('') :Args(0) {
             my ( $self, $c ) = @_;

             # Hello World
             $c->response->body( $c->welcome_message );
           }

           Now, whenever I request '/' from that script, default action
           triggers, and the index action doesn't.
           If I comment out the default action, the index DOES get called.

           Is this a bug? If not, what do I have to change to have
        both index
           and default in my root controller?


        Hi Matija,

        If you change the default attributes to "Private" it will do
        what you expect.  I think this may be a bug, though (thought
        this was fixed, but I may be remembering wrong).

    Ah, not quite. Setting private on "default" does cause index to be
    called when fetching "/", but now
    default doesn't get called for unknown paths.


        The index action should match "/" (though, in this
        circumstance you aren't really chaining to anything, so it
        would make more sense to use sub index : Path, which would do
        what you expect)


    To demonstrate the bug, I tried to make a minimal script that
    still showed it. The original script, the one which led me to
    discover this bug, was considerably bigger, and did indeed need /
    as part of the chain. But there's no point in posting the whole,
    multi-controller beast if I can demonstrate the bug with the most
    basic, two subroutine controller.


I think the problem is that you have it defined as Chained. Is that what you want? I think you just want

   index : Path Args(0) { ... }
With the default marked private, it doesn't get called whether index is chained or not, so that doesn't help.

And yes, as I said above, this was just a minimal test case to demonstrate the bug. The original script is bigger, and I think I have stuff chaining off index there.

_______________________________________________
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