Provided by: libmason-perl_2.21-1_all bug

NAME

       Mason::Manual::RequestDispatch - How request paths get mapped to page components

DESCRIPTION

       Given the request path

           /news/sports/hockey

       Mason searches for the following components in order, setting $m->path_info as noted.

           /news/sports/hockey.{mp,mc}
           /news/sports/hockey/index.{mp,mc}
           /news/sports/hockey/dhandler.{mp,mc}
           /news/sports/dhandler.{mp,mc}  # $m->path_info = hockey
           /news/sports.{mp,mc}           # $m->path_info = hockey (but see next section)
           /news/dhandler.{mp,mc}         # $m->path_info = sports/hockey
           /news.{mp,mc}                  # $m->path_info = sports/hockey (but see next section)
           /dhandler.{mp,mc}              # $m->path_info = news/sports/hockey

       where ".{mp,mc}" means either ".mp" (indicating a pure-perl component). or ".mc"
       (indicating a top-level component).

       The following sections describe these elements in more detail.

   Autoextended path
       The request path is suffixed with ".mp" and ".mc" to translate it to a component path.

           /news/sports/hockey.{mp,mc}

   Index
       An index matches its exact directory, nothing underneath.

           /news/sports/hockey/index.{mp,mc}

   Dhandlers
       A dhandler matches its directory as well as anything underneath, setting "$m->path_info"
       to the remainder.

           /news/sports/hockey/dhandler.{mp,mc}
           /news/sports/dhandler.{mp,mc}  # $m->path_info = hockey
           /news/dhandler.{mp,mc}         # $m->path_info = sports/hockey
           /dhandler.{mp,mc}              # $m->path_info = news/sports/hockey

   Partial paths
       A component can match an initial part of the URL, setting "$m->path_info" to the
       remainder:

           /news/sports.{mp,mc}           # $m->path_info = hockey
           /news.{mp,mc}                  # $m->path_info = sports/hockey

       Since this isn't always desirable behavior, it must be explicitly enabled for the
       component. Mason will call method "allow_path_info" on the component class, and will only
       allow the match if it returns true:

           <%class>
           method allow_path_info { 1 }
           </%class>

       The default "allow_path_info" returns false.

       "allow_path_info" is not checked on dhandlers, since the whole point of dhandlers is to
       match partial paths.

   Trailing slash
       If the request URL has a trailing slash (ends with "/"), we remove it before the match
       process begins and add it to the "$m->path_info". Components that should match must have
       "allow_path_info" return true.

       For example:

           ## request URL /news/
           /news/index.{mp,mc}     # $m->path_info = / if index.{mp,mc} has
                                   # allow_path_info => true
           /news/dhandler.{mp,mc}  # $m->path_info = /
           /news.{mp,mc}           # $m->path_info = / if news.{mp,mc} has
                                   # allow_path_info => true

           ## request URL /news/sports/
           /news/sports/index.{mp,mc}     # $m->path_info = / if index.{mp,mc} has
                                          # allow_path_info => true
           /news/sports/dhandler.{mp,mc}  # $m->path_info = /
           /news/sports.{mp,mc}           # $m->path_info = / if sports.{mp,mc}
                                          # has allow_path_info => true
           /news/dhandler.{mp,mc}         # $m->path_info = sports/
           /news.{mp,mc}                  # $m->path_info = /sports/ if news.{mp,mc}
                                          # has allow_path_info => true

   Routes
       It is possible to use route syntax to more elegantly parse "$m->path_info" for dhandlers
       and partial paths, e.g.

           <%class>
           route "{year:[0-9]+}/{month:[0-9]{2}}";
           </%class>

       See Mason::Plugin::RouterSimple.

SEE ALSO

       Mason

AUTHOR

       Jonathan Swartz <swartz@pobox.com>

COPYRIGHT AND LICENSE

       This software is copyright (c) 2012 by Jonathan Swartz.

       This is free software; you can redistribute it and/or modify it under the same terms as
       the Perl 5 programming language system itself.