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