geoff 2003/07/31 08:01:56
Modified: src/docs/2.0/user/config custom.pod
Log:
add cmd_data and $parms->info docs
Submitted by: geoff
Revision Changes Path
1.6 +50 -0 modperl-docs/src/docs/2.0/user/config/custom.pod
Index: custom.pod
===================================================================
RCS file: /home/cvs/modperl-docs/src/docs/2.0/user/config/custom.pod,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- custom.pod 20 Feb 2003 02:50:02 -0000 1.5
+++ custom.pod 31 Jul 2003 15:01:56 -0000 1.6
@@ -266,6 +266,56 @@
be a string based on the directive's I<L<name|/C_name_>> and
I<L<args_how|/C_args_how_>> attributes.
+=head3 C<cmd_data>
+
+Sometimes it is useful to pass information back to the directive
+handler callback. For instance, if you use the I<func> parameter
+to specify the same callback for two different directives you
+might want to know which directive is being called currently.
+To do this, you can use the I<cmd_data> parameter, which allows
+you to store arbitrary strings for later retrieval from your
+directive handler. For instance.
+
+ our @APACHE_MODULE_COMMANDS = (
+ {
+ name => '<Location',
+ # func defaults to Redirect()
+ req_override => Apache::RSRC_CONF,
+ args_how => Apache::RAW_ARGS,
+ },
+ {
+ name => '<LocationMatch',
+ func => Redirect,
+ req_override => Apache::RSRC_CONF,
+ args_how => Apache::RAW_ARGS,
+ cmd_data => '1',
+ },
+ );
+
+Here, we are using the C<Location()> function to process both
+the C<Location> and C<LocationMatch> directives. In the
+C<Location()> callback we can check the data in the I<cmd_data> slot
+to see whether the directive being processed is C<LocationMatch>
+and alter our logic accordingly. How? Through the
+C<info()> method exposed by the C<Apache::CmdParms> class.
+
+ use Apache::CmdParms ();
+
+ ...
+
+ sub Location {
+
+ my ($cfg, $parms, $data) = @_;
+
+ # see if we were called via LocationMatch
+ my $regex = $parms->info;
+
+ ...
+ }
+
+In case you are wondering, C<Location> and C<LocationMatch> were
+chosen for a reason - this is exactly how httpd core handles these
+two directives.
=head2 Directive Scope Definition Constants
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]