]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole.pm
fixed error template in TT.pm and possible work around for ->object to work
[maypole.git] / lib / Maypole.pm
index 64e5a1a886c877d8aa59475426ff63f7f9714070..770467a0b83a6e8e77d94e3a15521a2506df77cd 100644 (file)
@@ -401,11 +401,16 @@ Constructs a very minimal new Maypole request object.
 sub new
 {
     my ($class) = @_;
-    
     my $self = bless {
-        template_args => {},
         config        => $class->config,
     }, $class;
+
+       $self->stash({});
+       $self->params({});
+       $self->query({});
+       $self->template_args({});
+       $self->args([]);
+       $self->objects([]);
     
     return $self;
 }
@@ -453,20 +458,14 @@ sub handler : method  {
   $self->status(Maypole::Constants::OK()); # set the default
   $self->__call_hook('start_request_hook');
   return $self->status unless $self->status == Maypole::Constants::OK();
-    
   die "status undefined after start_request_hook()" unless defined
     $self->status;
-    
   $self->get_session;
   $self->get_user;
-    
   my $status = $self->handler_guts;
-
   return $status unless $status == OK;
-
   # TODO: require send_output to return a status code
   $self->send_output;
-
   return $status;
 }
 
@@ -481,18 +480,31 @@ request. You'll need to set up actions and templates
 which return fragments of HTML rather than entire pages, but once you've
 done that, you can use the C<component> method of the Maypole request object
 to call those actions. You may pass a query string in the usual URL style.
+
 You should not fully qualify the Maypole URLs.
 
+Note: any HTTP POST or URL parameters passed to the parent are not passed to the
+component sub-request, only what is included in the url passed as an argyument
+to the method
+
 =cut
 
 sub component {
     my ( $r, $path ) = @_;
-    my $self = bless { parent => $r }, ref $r;
+    my $self = bless { parent => $r, config => $r->{config}, } , ref $r;
+       $self->stash({});
+       $self->params({});
+       $self->query({});
+       $self->template_args({});
+       $self->args([]);
+       $self->objects([]);
+
+    $self->get_user;
     my $url = URI->new($path);
+    warn "path : $path\n";
     $self->{path} = $url->path;
     $self->parse_path;
     $self->params( $url->query_form_hash );
-    $self->query( $r->params );
     $self->handler_guts;
     return $self->output;
 }
@@ -916,7 +928,7 @@ processed.
 
 sub exception { 
     my ($self, $error, $when) = @_;
-    if ($self->view_object->can("report_error") and $self->debug) {
+    if (ref $self->view_object && $self->view_object->can("report_error") and $self->debug) {
         $self->view_object->report_error($self, $error, $when);
         return OK;
     }
@@ -943,8 +955,6 @@ sub send_output {
 }
 
 
-
-
 =back
 
 =head2 Path processing and manipulation
@@ -1134,6 +1144,24 @@ If the first item in C<$self-E<gt>args> can be C<retrieve()>d by the model
 class, it will be removed from C<args> and the retrieved object will be added to
 the C<objects> list. See L<Maypole::Model> for more information.
 
+
+=item object
+
+Alias to get/set the first/only model object. The object will be accessible
+in the view templates.
+
+When used to set the object, will overwrite the request objects
+with a single object.
+
+=cut
+
+sub object {
+  my ($r,$object) = @_;
+  $r->objects([$object]) if ($object);
+  return undef unless $r->objects();
+  return $r->objects->[0];
+}
+
 =item template_args
 
     $self->template_args->{foo} = 'bar';
@@ -1142,7 +1170,7 @@ Get/set a hash of template variables.
 
 =item stash
 
-A place to put custom application data. Not used by Maypole itself. 
+A place to put custom application data. Not used by Maypole itself.
 
 =item template