From 88403615773aa8c4a86006b5d41577e586d1c0ec Mon Sep 17 00:00:00 2001 From: Aaron Trevena Date: Tue, 5 Jun 2007 21:37:40 +0000 Subject: [PATCH] added preprocess_location method git-svn-id: http://svn.maypole.perl.org/Maypole/trunk@567 48953598-375a-da11-a14b-00016c27c3ee --- Changes | 2 ++ lib/Apache/MVC.pm | 3 +++ lib/Maypole.pm | 21 +++++++++++++++++---- lib/Maypole/View/TT.pm | 2 +- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/Changes b/Changes index 71b8f4d..71e5006 100644 --- a/Changes +++ b/Changes @@ -26,6 +26,8 @@ For information about current developments and future releases, see: fix to correct problem with LocationMatch and regex based Location directives in apache config. change to view::base to only call display_columns, stringify_columns, to_cgi if model class can changed template path to only look for custom, factory, etc on first/only path provided + fix to redirect_request + Fixed typo in _do_update_or_create (bug 26495) 2.111 Mon 30 April 2007 - forked - see 2.111 changelog diff --git a/lib/Apache/MVC.pm b/lib/Apache/MVC.pm index 696ab84..dea64ff 100644 --- a/lib/Apache/MVC.pm +++ b/lib/Apache/MVC.pm @@ -127,6 +127,7 @@ sub parse_location { # Reconstruct the request headers $self->headers_in(Maypole::Headers->new); + my %headers; if ($MODPERL2) { %headers = %{$self->ar->headers_in}; } else { %headers = $self->ar->headers_in; } @@ -134,6 +135,8 @@ sub parse_location { $self->headers_in->set($_, $headers{$_}); } + $self->preprocess_location(); + my $path = $self->ar->uri; my $base = URI->new($self->config->uri_base); my $loc = $base->path; diff --git a/lib/Maypole.pm b/lib/Maypole.pm index 09493ec..7e896c3 100644 --- a/lib/Maypole.pm +++ b/lib/Maypole.pm @@ -984,8 +984,7 @@ properties. Calls C before parsing path and setting properties. =cut -sub parse_path -{ +sub parse_path { my ($self) = @_; # Previous versions unconditionally set table, action and args to whatever @@ -1010,19 +1009,32 @@ sub parse_path =item preprocess_path Sometimes when you don't want to rewrite or over-ride parse_path but -want to rewrite urls or extract data from them before it is parsed. +want to rewrite urls or extract data from them before it is parsed, +the preprocess_path/location methods allow you to munge paths and urls +before maypole maps them to actions, classes, etc. This method is called after parse_location has populated the request information and before parse_path has populated the model and action information, and is passed the request object. You can set action, args or table in this method and parse_path will -then leave those values in place or populate them if not present +then leave those values in place or populate them based on the current +value of the path attribute if they are not present. =cut sub preprocess_path { }; +=item preprocess_location + +This method is called at the start of parse_location, after the headers in, and allows you +to rewrite the url used by maypole, or dynamically set configuration +like the base_uri based on the hostname or path. + +=cut + +sub preprocess_location { }; + =item make_path( %args or \%args or @args ) This is the counterpart to C. It generates a path to use @@ -1046,6 +1058,7 @@ string. =cut + sub make_path { my $r = shift; diff --git a/lib/Maypole/View/TT.pm b/lib/Maypole/View/TT.pm index 3fbfbd6..a14b80f 100644 --- a/lib/Maypole/View/TT.pm +++ b/lib/Maypole/View/TT.pm @@ -62,7 +62,7 @@ sub report_error { # Need to be very careful here. my $tt = Template->new; unless (ref $r->{config}) { - warn "no config for this request\n"; + $r->warn("no config for this request"); $error .= '
There was a problem finding configuration for this request'; $r->{config} ||= {}; } -- 2.39.2