with 'MooseX::Emulate::Class::Accessor::Fast';
has cookies => (is => 'rw', default => sub { {} });
-has body => (is => 'rw', default => '', lazy => 1, predicate => 'has_body',
- clearer => '_clear_body'
-);
-after 'body' => sub { # If someone assigned undef, clear the body so we get ''
- if (scalar(@_) == 2 && !defined($_[1])) {
- $_[0]->_clear_body;
- }
-};
+has body => (is => 'rw', default => undef);
+sub has_body { defined($_[0]->body) }
+
has location => (is => 'rw');
has status => (is => 'rw', default => 200);
has finalized_headers => (is => 'rw', default => 0);
has headers => (
is => 'rw',
+ isa => 'HTTP::Headers',
handles => [qw(content_encoding content_length content_type header)],
default => sub { HTTP::Headers->new() },
required => 1,
want to C< return > or C<< $c->detach() >> to interrupt the normal
processing flow if you want the redirect to occur straight away.
+B<Note:> do not give a relative URL as $url, i.e: one that is not fully
+qualified (= C<http://...>, etc.) or that starts with a slash
+(= C</path/here>). While it may work, it is not guaranteed to do the right
+thing and is not a standard behaviour. You may opt to use uri_for() or
+uri_for_action() instead.
+
=cut
sub redirect {
defined $self->write($,) or return;
defined $self->write($_) or return;
}
+ defined $self->write($\) or return;
return 1;
}