Can't call method "is_initial_req" without a package or object reference at .........

2003-06-17 Thread Martin Moss
All,

I'm having some problems with Apache giving me grief, or most probably me
getting my knickers in a complete twist.
I get the following error:-

Can't call method "is_initial_req" without a package or object reference at
.

It seems to happen when my URL ends like this:-

/somepath/16
but not when it ends like this:-
/somepath/16/



Below is the code which is where the error occurs.
sub handler {
  my $r = My::Apache::Request->instance(shift);

  print STDERR Dumper($r);
  print STDERR "\n\n\nBOOOBS\n\n\n\n\n";
  die "$r not defined" unless $r;
  return OK unless $r->is_initial_req();#ERROR OCCURS HERE
  my $uri = $r->uri;
  my $log = $r->log;


..
}

The handler is simply a multiplexer which based upon a database
configuration adds the relevant method handler to the handlers queue.

The 'instance' routine for My::Apache::Request is inheritted from the
Apache::Request class.

the 'new' routine for My::Apache::Request is as follows:-

sub new
{

  my ($class, $r) = @_;

  my $length=32;

  unless ($r->is_main )
  {
print STDERR "Apache::Request is not Main, Getting Main\n";
print STDERR Dumper($r);
$r=$r->main;
print STDERR "Main Apache::Request is:-\n";
print STDERR Dumper($r);
print STDERR "DECLINING\n";
return DECLINED;
  }
  unless ($r)
  {
print STDERR "making a new Request object\n";
$r = Apache->request;
  }



  $r=Apache::Request->new($r);


  my $self = bless {_r => $r}, $class;


  my $t=substr(Digest::MD5::md5_hex(Digest::MD5::md5_hex(time(). {}. rand().
$$)), 0, $length);
  $self->{XX_created_time_XX}=$t;
  my @params=$self->param();
  print STDERR "Here's the Parameters for $class\n";
print STDERR Dumper(@params);
  my $lang_id=$self->param('lang_id');
  if ($lang_id)
  {

$lh=My::Maketext->get_handle($class,$lang_id);
  }
  else
  {
   $lh=My::Maketext->get_handle($class,My::Conf::DEFAULT_LANGUAGE_ID);
  }

  print STDERR "Creating ".ref($self)." $t\n";
  #$self->interpret_uri;
  return $self;
}






Re: Can't call method "is_initial_req" without a package or object reference at .........

2003-06-17 Thread Martin Moss
Ok, that makes sense, thank you:-)
But 'What' should I return, is $r->main the right thing to return?

> >   unless ($r->is_main )
> >   {
> > print STDERR "Apache::Request is not Main, Getting Main\n";
> > print STDERR Dumper($r);
> > $r=$r->main;
> > print STDERR "Main Apache::Request is:-\n";
> > print STDERR Dumper($r);
> > print STDERR "DECLINING\n";
> > return DECLINED;
> >   }
>
> you're not returning an object from your constructor on internal redirects
:)
>
> HTH
>
> --Geoff
>
>



Re: Can't call method "is_initial_req" without a package or object reference at .........

2003-06-17 Thread Martin Moss
Thanks Geoffrey.

Marty
- Original Message - 
From: "Geoffrey Young" <[EMAIL PROTECTED]>
To: "Martin Moss" <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Sent: Tuesday, June 17, 2003 4:23 PM
Subject: Re: Can't call method "is_initial_req" without a package or object
reference at .


>
>
> Martin Moss wrote:
> > Ok, that makes sense, thank you:-)
> > But 'What' should I return, is $r->main the right thing to return?
>
> I've found that it's pretty rare that you want to mess with main vs
subrequest logic
> yourself.  instead, I would just make the constructor return an object
based on whatever
> mod_perl passes it which is, in turn, whatever request record Apache deems
to be the
> proper one for the current (sub)request.
>
> so new() should probably just be something like
>
> sub new {
>
>my ($class, $r) = @_;
>
>$r = Apache::Request->new($r);
>
>my $self = bless {_r => $r}, $class;
>
>$self->init();
>
>return $self;
> }
>
> if it is important to insure that you only populate object attributes
once, even in the
> case of internal redirects or lookups, you could hang attributes off of
pnotes in the main
> request
>
> sub init {
>
>my $self = shift;
>
>$t = ubstr(Digest::MD5...);
>
>if ($r->main) {
>  $self->{XX_created_time_XX} = $t;
>  $self->{_r}->pnotes(XX_created_time_XX => $t)
>}
>else {
>  $t = $self->{_r}->main->pnotes('XX_created_time_XX');
>}
>...
> }
>
> or somesuch.  untested, but you get the idea :)
>
> HTH
>
> --Geoff
>
>