A couple of clarifications:
1) I typo'd 'sub sub' below in the 'add' action, whoops!
2) In my example, I should have used 'detail' as the action instead of
'view', to match your layout ('view' is what I use).
3) I think the general confusion on all of this, and I didn't wrap my
head around this when I read the Chained perldoc at first either (even
though reading it again, it makes sense) is how the 'Chained' attribute
behaves. A general rule of thumb I keep in my head is (and this doesn't
apply in all situations and special cases, but stays true for most
normal chain layouts I have used)...
When dealing with 'CaptureArgs' type methods, the 'Chained' attribute
refers to parts of the URI path.
When dealing with 'Args' type endpoint actions, the 'Chained' attribute
refers to the 'CaptureArgs' method we want to chain off of, and has
nothing to do with the URI path.
Danny Warren
Danny Warren wrote:
This is the same layout I have for my chained actions, and I went
through the same "huh?" phase as well.
You seem to be on the right track so far. Here is a quick copy / paste
/ hack job of my layout adapted to your examples. Won't go in to too
much detail since I am busy at work, so let me know if this needs
clarified further.
In Foo::Controller::Admin (left off "Form" attrib in examples, just
showing the chain layout)...
# Not chained, responds to /admin
sub index : Private { ... }
# Not chained, responds to /admin/add
sub sub add : Local { ... }
# Captures a book id in the chain for use by further chained actions
# You would validate the id, grab it from the model, and put it in
# the stash here
sub get_book : PathPart('admin') Chained CaptureArgs(1)
{
my ( $self, $c, $id) = @_;
...
}
# Chain endpoint for viewing book, responds to /admin/99
sub view : PathPart('') Chained('get_book') Args(0) { ... }
# Chain endpoint for editing book, responds to /admin/99/edit
sub edit : Chained('get_book') Args(0) { ... }
# Chain endpoint for deleting book, responds to /admin/99/delete
sub delete : Chained('get_book') Args(0) { ... }
Hope that helps!
Danny Warren
Doran L. Barton wrote:
Hey guys, this very well may be due purely to my lack of experience in
this
matter, but I'm having trouble getting chained actions working the way I
WANT them to work and I'm suspicious the way I want them to work is
not the
way they're intended to work.
Here's the situation: I want the application to have public paths like
these:
/admin List of all existing "books" you can look at
/admin/add Form (FormBuilder) for adding a new book
/admin/99 Detailed output of data on book 99
/admin/99/edit Form (FormBuilder) for editing book 99 data
/admin/99/delete Form for confirming deletion of book 99
Looking at the Catalyst::DispatchType::Chained documentation, it's not
obvious (to me, anyway) how I should go about this.
The way I see it, /admin should be handled by a:
package Foo::Controller::Admin;
sub index : private {...}
and /admin/add should be handled by a:
sub add : Local Form {...}
So, how exactly would someone suggest I set up the chained handlers
for the
other paths? I had something like this:
sub detail :PathPart('admin') Chained('/') Args(1) {...}
And that worked for the /admin/99 path, but nothing I can
muster up seems
to match the /admin/99/{edit,delete} paths.
Any thoughts from those more experienced than me?
------------------------------------------------------------------------
_______________________________________________
List: Catalyst@lists.rawmode.org
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive:
http://www.mail-archive.com/catalyst@lists.rawmode.org/
Dev site: http://dev.catalyst.perl.org/
_______________________________________________
List: Catalyst@lists.rawmode.org
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/
Dev site: http://dev.catalyst.perl.org/
_______________________________________________
List: Catalyst@lists.rawmode.org
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/
Dev site: http://dev.catalyst.perl.org/