The Chained('.') parameter is used for chaining across controllers. I
understand your URI layout from your comments, but I don't understand
what you are trying to do with all those weird Chained params you are using.
Here is how I would lay it out. Read the perldoc again, it took me a
few read-throughs to completely grok the subtleties of how chains work.
In MyApp::Controller::Object...
# Responds to /object/list
sub list : Local { ... }
# Captures object id, as in /object/[OBJ_ID]
sub object : PathPart('object') Chained CaptureArgs(1) { ... }
# Responds to /object/[OBJ_ID]/edit
sub edit : Chained('object') Args(0) { ... }
# Chain point for chaining to property controller
# NOTE: This is just a jump point, don't put bizlogic in here,
# put it in the property controller
sub property : Chained('object') CaptureArgs(0) { ... }
In MyApp::Controller::Object::Property
# Responds to /object/[OBJ_ID]/property/list
sub list : Chained('.') Args(0) { ... }
# Captures property id, as in /object/[OBJ_ID]/property/[PROP_ID]
sub property : PathPart('') Chained('.') CaptureArgs(1) { ... }
# Responds to /object/[OBJ_ID]/property/[PROP_ID]/edit
sub edit : Chained('property') Args(0) { ... }
Hope that helps!
Danny Warren
Oleg Pronin wrote:
Greetings.
I've got some kind of problem using chained actions.
There are some objects. Each object has a number of properties.
And this is how i want it to be:
URL for a list of objects is
/object/list
URL for editing object is
/object/OBJ_ID/edit (through chained action)
URL for list of object's properties
/object/OBJ_ID/property/list
URL for editing property
/object/OBJ_ID/property/PROP_ID/edit (through 2 chained actions)
I have MyApp::Controller::Object
sub list : Local { .... }
sub object : Chained('/') CaptureArgs(1) {
.... object-related-code ...
}
Problem one is that i've got to write something like this:
sub edit : Chained('object') Args(0) { ....}
^^^^^^^
i can't say Chained('.') because current path is "/object" and the chain
has
"/object/object" path.
I dont want to place the chain in the Root controller - this is wrong.
Problem two is how do i define last 2 urls.
In MyApp::Controller::Object::Property
sub list : PathPart('property/list') Chained('/object/object') Args(0) {
... }
this is very ugly!
and finally
sub property : Chained('/object/object') CaptureArgs(1) { ... }
sub edit : Chained('property') Args(0) { ... } ( again, i can't say
Chained('.') )
Do i do something wrong ? Why do i have to copy-paste a half of url to
ParhPart and Chained attributes?
How do i need to organize the structure of my controllers ?
I want to define such an actions in the way like this:
Controller::Object
sub list : Local {...} #
/object/list
sub object : Chained('/') CaptureArgs(1) {...}
sub edit : Chained('.') Args(0) {...} #/object/ID/edit
Controller::Object::Property
sub list : Chained('../') Args(0) {...}
#/object/ID/property/list
sub property : Chained('../') CaptureArgs(1) {...}
sub edit : Chained('.') Args(0) {...}
#/object/ID/property/ID/edit
Please somebody help!
------------------------------------------------------------------------
_______________________________________________
List: [email protected]
Listinfo: http://lists.rawmode.org/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.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/