George Hartzell wrote:
You didn't actually provide a broken example, so I cobbled one
together that I think does what you're describing, but it doesn't
exhibit the problems you've described.
I've stuck a shar archive of a little app on the end of this message.
http://localhost:8080/foo/update/2
followed by
http://localhost:8080/foo/new_record
does not seem to have a stuck id value.
Does it have the problem on your system?
If not, can you figure out how to make it have the problem?
Yes!! Just put a PARAMS entry in Dispatch:
sub dispatch_args {
return {
table => [
':app/:rm' => { },
':app/:rm/:id' => { },
],
args_to_new => {
PARAMS => { foo => 'bar' }, # <= comment to change behaviour
},
};
}
Your example app. will now exhibit the described behaviour just using:
http://localhost:8080/foo/new_record
http://localhost:8080/foo/new_record/123
http://localhost:8080/foo/new_record
Even an empty PARAMS arg (PARAMS => {}) switches on variable
persistence. See also the debug output to console to see the id param
presence in every request.
Not sure if this is the intended behaviour, but presumably means it's
not possible to use the PARAMS arg in args_to_new - at least not without
being very careful and fully aware of the consequences.
Just as an exercise - I'd never encountered a shar before - I've
modified your original for the minimal complexity required to
demonstrate the 'misbehaviour':
echo c - .
mkdir -p . > /dev/null 2>&1
echo x - ./foo.pl
sed 's/^X//' >./foo.pl << 'END-of-./foo.pl'
Xpackage main;
X
Xuse CGI::Application::Dispatch::Server;
X
Xmy $server =
X CGI::Application::Dispatch::Server->new(
X class => 'Foo::Dispatch',
X root_dir => '/tmp',
X );
X$server->run;
X
END-of-./foo.pl
echo c - ./Foo
mkdir -p ./Foo > /dev/null 2>&1
echo x - ./Foo/Dispatch.pm
sed 's/^X//' >./Foo/Dispatch.pm << 'END-of-./Foo/Dispatch.pm'
Xpackage Foo::Dispatch;
Xuse base 'CGI::Application::Dispatch';
X
Xsub dispatch_args {
X return {
X debug => 1,
X table => [
X ':app/:rm' => { },
X ':app/:rm/:id' => { },
X ],
X args_to_new => {
X PARAMS => { },
X },
X };
X}
X
X1;
END-of-./Foo/Dispatch.pm
echo x - ./Foo.pm
sed 's/^X//' >./Foo.pm << 'END-of-./Foo.pm'
Xpackage Foo;
Xuse base CGI::Application;
X
Xsub setup {
X my $self = shift;
X $self->start_mode('update');
X $self->run_modes(
X 'new_record' => 'new_record',
X );
X}
X
Xsub new_record {
X my $self = shift;
X my $vars = $self->query->Vars;
X
X $vars->{id} = $self->param('id') if $self->param('id');
X return "<pre>new_record param('id'): " . $self->param('id') . "</pre>"
X . $self->dump_html;
X}
X
X1;
END-of-./Foo.pm
exit
--
Richard Jones
##### CGI::Application community mailing list ################
## ##
## To unsubscribe, or change your message delivery options, ##
## visit: http://www.erlbaum.net/mailman/listinfo/cgiapp ##
## ##
## Web archive: http://www.erlbaum.net/pipermail/cgiapp/ ##
## Wiki: http://cgiapp.erlbaum.net/ ##
## ##
################################################################